Javascript Tab keydown按下并按住标签时,它会无限地闪烁

时间:2016-01-15 10:39:29

标签: javascript jquery

我在一组输入上写了一些简单的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;
    }
})

然而,当我按下标签并按住时,光标会无限闪烁,事件不再发生,我必须在窗外聚焦并回来让它停止。

现在已经试图解决很多天了,任何人都可以对如何阻止这种行为有所启发吗?

好的家伙我编辑了代码并重现了错误,我发现了错误并解决了问题。以下是产生效果的代码。

$(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。我希望这种见解对未来的某些人有所帮助。

3 个答案:

答案 0 :(得分:1)

你有一个错误。它应该是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;
  }
});

答案 1 :(得分: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;
  }
});

答案 2 :(得分: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;
 }
})