Greasy Fork is available in English.

Tab输入

按TAB键在输入框之间快速切换

  1. // ==UserScript==
  2. // @name Tab输入
  3. // @name:en Tab-Input
  4. // @namespace http://css.thatwind.com/
  5. // @icon https://using-1255852948.cos.ap-shanghai.myqcloud.com/auto_tab-icon.png
  6. // @description:en Switch to input by Tab button.
  7. // @version 0.1.3
  8. // @description 按TAB键在输入框之间快速切换
  9. // @author 遍智
  10. // @match *://*/*
  11. // @grant none
  12. // @run_at document_end
  13. // ==/UserScript==
  14.  
  15. (function() {
  16.  
  17. console.log("auto_tab");
  18.  
  19. var all_input=[]; // 所有可见输入框
  20. var now_target=null; // 当前聚焦输入框
  21.  
  22. setInterval(refresh,50);
  23.  
  24. function refresh(){
  25. // 刷新获取所有可见输入框 刷新当前聚焦输入框
  26. var input_ls=document.querySelectorAll("input[type=text]:not([disabled]),input[type=password]:not([disabled]),input[type=number]:not([disabled]),input[type=search]:not([disabled]),input:not([type]):not([disabled])");
  27. var input_ls_re=[];
  28. for(var i=0;i<input_ls.length;i++){
  29. if(input_ls[i].clientWidth>0&&input_ls[i].clientHeight>0) input_ls_re.push(input_ls[i]);
  30. }
  31. all_input=input_ls_re;
  32. if(document.querySelector("input:focus")) now_target=document.querySelector("input:focus");
  33. else if(getIndex(all_input,now_target)==-1) now_target=null;
  34. // console.log(all_input,now_target);
  35. }
  36.  
  37.  
  38.  
  39. document.body.addEventListener("keydown",function(e){ // tab键事件
  40. if(e.keyCode===9){
  41. e.preventDefault();
  42. refresh();
  43. var new_index;
  44. if(now_target&&now_target.clientWidth>0&&now_target.clientHeight>0){ // now_target存在
  45. new_index=getIndex(all_input,now_target)+1;
  46. if(new_index>=all_input.length) new_index=0;
  47. }
  48. else new_index=0;
  49. if(all_input.length<1) return;
  50. trigger(document.body,"mousedown");
  51. trigger(document.body,"mouseup");
  52. trigger(document.body,"click");
  53. all_input[new_index].click();
  54. all_input[new_index].focus();
  55. refresh();
  56. }
  57. });
  58.  
  59. document.body.addEventListener("click",function(){
  60. refresh();
  61. })
  62.  
  63. function getIndex(e_arr,e){
  64. for(var i=0;i<e_arr.length;i++){
  65. if(e_arr[i]===e){
  66. return i;
  67. }
  68. }
  69. return -1;
  70. }
  71.  
  72.  
  73. function myDelegate(p,e,s,f){p.addEventListener(e,function(ev){var targetNow=ev.target;while(targetNow!=p){if(indexOf(p.querySelectorAll(s),targetNow)!=-1){f(ev,targetNow);break;}targetNow=targetNow.parentNode;}});function indexOf(arr,e){for(var i=0;i<arr.length;i++){if(arr[i]===e)return i;}return-1;}}
  74.  
  75. function trigger(elem,event){
  76. if(document.all) {
  77. elem.event();
  78. } else {
  79. var evt = document.createEvent("Events");
  80. evt.initEvent(event,true,true);
  81. elem.dispatchEvent(evt);
  82. };
  83. }
  84.  
  85.  
  86. })();