我正在使用开关在按下某个键时触发一些代码。这不是确切的代码,但它基本上是我使用的(这只是为了在这里保持简短和简单。)
$(document).keydown(function(e) {
switch(e.keyCode) {
case 39:
e.preventDefault();
alert("Arrow Key");
break;
case 37:
e.preventDefault();
alert("Arrow Key");
}
});
当输入框处于焦点时,如何防止事件触发?
答案 0 :(得分:4)
我认为您的意思是,只有当目标元素不是e.preventDefault()
标记时,您才想要input
。你可以这样做:
$(document).keydown(function(e) {
if (e.target.nodeName.toLowerCase() !== 'input') {
switch(e.keyCode) {
case 39:
e.preventDefault();
alert("Arrow Key");
break;
case 37:
e.preventDefault();
alert("Arrow Key");
}
}
});
e.target
是事件发起的元素。或者,您可以使用jQuery的事件委托API:
$(document).delegate(':not(input)', 'keydown', function(e) {
switch(e.keyCode) {
case 39:
e.preventDefault();
alert("Arrow Key");
break;
case 37:
e.preventDefault();
alert("Arrow Key");
}
});
编辑更新了我的回答“不是输入”,而不是“是输入”检查。
答案 1 :(得分:1)
可能有更优雅的方式,但我会做这样的事情:
var inputHasFocus = false;
$("#some_input_id").focusin(function () {
inputHasFocus = true;
}).focusout(function () {
inputHasFocus = false;
});
然后在你的案例陈述中使用它。
答案 2 :(得分:1)
您可以使用document.activeElement
返回当前关注的元素。
来自MDN的简要文档:
返回当前关注的元素,即,如果用户键入any,将获取击键事件的元素。该属性是只读的。
也就是说,为了防止当输入处于焦点时触发按键事件,您可以忽略当焦点元素为input
时的按键事件处理
if (!$(document.activeElement).is("input"){ /* handle keystroke events here */ }