2016-01-15 36 views
0

我已經寫上一組輸入一些簡單的keydown事件處理程序,像這樣的按下並按住選項卡時的Javascript標籤的keydown,它閃爍無限

$('.a, .b, .c').on('keydown', function (e) { 
    switch(keycode) { 
     case 9: 
      e.preventDefault(); 
      e.stopPropagation(); 
      if($('.a')) 
       // focus next 
      else if($('.b')) 
       // focus next 
      .... 
      break; 
    } 
}) 

然而,當我按下tab不放,光標閃爍無限的事件不再發生,我必須把注意力集中在窗外,然後回來停下來。

一直試圖弄清楚現在有很多天,任何人都可以照亮一下我該如何阻止這種行爲?

好的,我已經編輯了代碼,並重現了錯誤,我發現了錯誤並解決了問題。下面是生成效果的代碼。

$(document).ready(function(){ 

    $('.c, .d').on('focus', function (e) { 
         if (e.relatedTarget) { 
          var v = $(this).val(); 
          var n = v.toString().replace(/,/g, ""); 
          $(this).val(n); 
          var $elementThis = $(this); 
          setTimeout(function() { $elementThis.select(); }, 50); 
         } 
    }); 

    $('.a, .b').on('focus', function (e) { 
     if (e.relatedTarget) { 
      var $elementThis = $(this); 
      setTimeout(function() { $elementThis.select(); }, 50); 
     } 
    }); 

    $('.a, .b, .c, .d').on('keydown', function(e) { 
    var keycode = e.charCode || e.keyCode || 0; 
    switch (keycode) { 
      case 9: 
      { 
       e.preventDefault(); 
       e.stopImmediatePropagation(); 

       if ($(this).hasClass('a')) { $('.b').focus(); } 
       else if ($(this).hasClass('b')) { $('.c').focus(); } 
       else if ($(this).hasClass('c')) { $('.d').focus(); } 
       else if ($(this).hasClass('d')) { $('.a').focus(); } 

       break; 
      } 
     } 
    }) 
}); 

那是給我這個問題的部分是

setTimeout(function() { $elementThis.select(); }, 50); 

使其閃爍不停。 我在找它的替代品。歡迎任何建議。

請刪除downvote。我希望這種見解能夠對未來某個人有所幫助。

+1

好像是在這裏很好:https://jsfiddle.net/RoryMcCrossan/r0g1vfjL/。你能向我們展示一個問題的例子嗎? –

+0

你試過'返回false;',它,以防止默認'tab'行爲('e.prevenDefault();'防止冒泡,不是默認的按鍵行爲)? – ankhzet

+0

你的'e.keyCode'和'e.preventDefault()'存在拼寫錯誤https://jsfiddle.net/r0g1vfjL/2/ – mylee

回答

2

你有一個錯誤的訪問。它應該是e.keyCode

$('.a, .b, .c').on('keydown', function (e) { 
    switch(e.keyCode) {  // Change this. Also better to check if `e.which` 
    case 9: 
     e.preventDefault(); // Change this 
     e.stopPropagation(); 
     if($('.a')) 
     ;//focus next 
     else if($('.b')) 
     ;//focus next 
     .... 
     break; 
    } 
}); 
0

關鍵的代碼應該這樣e.keyCode

$('.a, .b, .c').on('keydown', function (e) { 
switch(e.keyCode) 
{ 
    case 9: 
    e.preventDefault(); 
    e.stopPropagation(); 
    if($('.a')) 
    //focus next 
    else if($('.b')) 
    //focus next 
    .... 
    break; 
} 
}) 
1

完整版本:

$('.a, .b, .c').on('keydown', function (e) { 
    var charCode = e.which || e.keyCode; 
    switch(charCode) { 
    case 9: 
     e.preventDefault(); 
     e.stopPropagation(); 
     if($('.a')) 
     ;//focus next 
     else if($('.b')) 
     ;//focus next 
     .... 
     break; 
    } 
});