我正在使用以下代码:
$(document).keypress(function (e) {
if (e.which === 68 || e.which === 100) {
doStuff();
}
});
我想要的是将键'D'捕获为我页面中功能的快捷方式。问题是,这个页面有输入和textarea控件,当我在这个控件上运行时,会调用'doStuff()'函数。
如何避免它?只有当用户没有在可编辑控件中输入任何内容时,我才想要键'D'捕获。
谢谢!
答案 0 :(得分:3)
除e.target
之外,您可以测试当前活动元素是输入还是文本区域:
$(document).keypress(function (e) {
var focussedTag = document.activeElement && document.activeElement.nodeName;
if( focussedTag === 'INPUT' || focussedTag === 'TEXTAREA' ) {
return;
}
if (e.which === 68 || e.which === 100) {
doStuff();
}
} );
答案 1 :(得分:1)
在执行'doStuff'功能之前添加另一个检查。检查用户是否有任何焦点的输入元素,如果为true则只执行语句。
这样的事情:
$(document).keypress(function (e) {
if ( (e.which === 68 || e.which === 100) && (!$(input).is(":focus")) ) {
doStuff();
}
});
答案 2 :(得分:1)
$(document).on('keypress', ':not(:input)', function (e) {
if (e.which === 68 || e.which === 100) {
doStuff();
}
});
答案 3 :(得分:1)
另一个 -
$(document).keypress(function (e) {
if (e.which === 68 || e.which === 100) {
var _node = e.target.nodeName;
if( _node !== "INPUT" && _node !== "TEXTAREA" ){
doStuff();
}
}
});