我在左右箭头键按下时会发生一些事件:
$(document).keydown(function(e) {
switch(e.which) {
case 39: $("#next").trigger('click');
break;
case 37: $("#prev").trigger('click');
break;
}
});
然而,很明显,如果你在一个表格中并按左右移动文本,这些事件就会触发。
如何更改此项以便不会发生这种情况?
答案 0 :(得分:11)
您可以查看事件的目标(more information here)
$(document).keydown(function(e) {
//var target = (e.target) ? e.target : e.srcElement; // IE uses srcElement
// jQuery seems to handle this, so e.target should be fine
if(e.target.nodeName != 'INPUT') {
switch(e.which) {
case 39: $("#next").trigger('click');
break;
case 37: $("#prev").trigger('click');
break;
}
}
});
或者您可以通过将事件处理程序附加到输入元素来阻止事件冒泡:
$('input').keydown(function(e) {
e.stopPropagation();
});
<强>更新强>
同样,您可能希望测试TEXTAREA
的节点名称。
以下是一个示例:http://jsfiddle.net/86CKw/1/
答案 1 :(得分:2)
这是我能找到的最优雅的解决方案:
$(document).ready(function() {
$(document).keypress(function() {
if ( this !== event.target && (/textarea|select/i.test( event.target.nodeName ) || event.target.type === "text") ) {
return;
}
// deal with the events here
...
});
});
答案 2 :(得分:0)
if (e.target.closest('form').length===0) {
// keypress did not occur inside a form. handle it.
}