键盘和模糊同时发射

时间:2014-05-21 19:44:24

标签: javascript jquery

我有一个有趣的问题,我在表单元素上使用keyup和blur。我需要允许模糊和键盘事件从字段冒泡到我可以捕获它们的表单。

$('form').on('focusout submit keyup', function(e) {
    console.log($(e.target).attr('id'));
    $(e.target).css('background','red');
});

http://jsfiddle.net/Z6Ayx/

问题是当你跳出一个字段时,keyup和blur会激活。这是因为当你跳出一个字段时,模糊事件会在该字段上触发,但当你解除密钥时,你已经在新字段中,因此也会触发keyup事件。

我一直试图找到一个好的解决方案......我想到了一个非常可怕的解决方案,它涉及到每个领域添加一个focusin / focus事件。如果一个字段获得焦点,那么找到dom中的下一个字段并为其添加一个类,将其标记为“不在第一次按键验证”。但这似乎是一个坏主意

2 个答案:

答案 0 :(得分:2)

如果您的意思是通过在键盘上按Tab键键,那么选项卡也是键,因此它将触发键盘事件。请尝试以下方法检测选项卡:

$('form').on('keyup focusout submit', function(e) {
    if (e.keyCode == 9) {
       //tab was pressed do something else, set a flag to true perhaps
    } else {
       console.log($(e.target).attr('id'));
       $(e.target).css('background','red');
    }
});

答案 1 :(得分:2)

您需要通过检查e.keyCode != 9并阻止任何事情发生来排除tab键事件。

这应该适合你:

$('form').on('keyup focusout submit', function(e) {
  if (e.keyCode != 9) {
    console.log($(e.target).attr('id'));
    $(e.target).css('background','red');
  }
});