Javascript - 绑定(bind)到按键事件,除非用户处于文本输入状态

标签 javascript jquery

所以我有这个页面,用户可以在其中使用方向键在不同项目之间导航。为此,我使用 jquery 绑定(bind)器:

$(document.body).bind('keydown', function(event) {
// use the directional keys

我希望此事件每次都能工作,除非用户专注于文本输入。

所以我尝试像这样过滤掉事件:

$(document.body).bind('keydown', '*:not(input[type="text"], textarea)', function(event) {

但不幸的是,过滤器不起作用,并且在每种情况下都会触发事件。

我可以检测页面中每个输入的焦点(和模糊)事件,并通过全局 bool 值停用移动事件,但我发现它非常不优雅。

有没有办法让输入字段“消耗”事件,或者像我尝试做的那样使用反向选择器过滤事件?

提前致谢,

最佳答案

这不是有效的 .bind() 语法。传递给 .bind() 的事件无法被委托(delegate)。

您可能想使用.on() :

$(document.body).on('keydown', '*:not(input[type="text"], textarea)', function(event) {

});

JSFiddle

如果您使用 .on() 之前的 jQuery 版本(您不应该使用..),您可以使用 delegate() :

$(document.body).delegate('*:not(input[type="text"], textarea)', 'keydown', function(event){

});

关于Javascript - 绑定(bind)到按键事件,除非用户处于文本输入状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32871713/

相关文章:

javascript - 他们如何在 javascript/jquery 中实现这种半透明叠加效果?

javascript - parent.parent.window.location.href 不工作

javascript - 有没有办法使用 JavaScript 引入 Internet Explorer 条件注释?

javascript - 获取我的li所在的ul的id

javascript - 使用 jquery ajax 与 native xhr

javascript - 跨测试文件共享模拟

javascript - 在输入文本字段上按 Enter 键提交表单

javascript - 如何在jtree搜索过滤器jquery中播种结果多词组合匹配(jtree中的多词和条件)

javascript - Jquery 使用电子邮件验证多个输入

javascript - 将 jQuery datepicker 分配给 div 元素并获取值