我有一个有趣的问题,我在表单元素上使用keyup和blur。我需要允许模糊和键盘事件从字段冒泡到我可以捕获它们的表单。
$('form').on('focusout submit keyup', function(e) {
console.log($(e.target).attr('id'));
$(e.target).css('background','red');
});
问题是当你跳出一个字段时,keyup和blur会激活。这是因为当你跳出一个字段时,模糊事件会在该字段上触发,但当你解除密钥时,你已经在新字段中,因此也会触发keyup事件。
我一直试图找到一个好的解决方案......我想到了一个非常可怕的解决方案,它涉及到每个领域添加一个focusin / focus事件。如果一个字段获得焦点,那么找到dom中的下一个字段并为其添加一个类,将其标记为“不在第一次按键验证”。但这似乎是一个坏主意
答案 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');
}
});