jQuery:在整个文档上触发按键功能,但不在输入和文本区域内
jQuery: trigger keypress function on entire document but not inside inputs and textareas?
我有这个…
$(document).keypress(function(e) {
if ( e.keyCode === 119 ) // w
doSomething();
});
Wo在我的文档上按"w"时,doSomething()
函数将启动。当我当前在input
字段或textarea
中键入(对焦)时,如何防止它触发?
您必须过滤掉事件之后的元素,而不是选择器中的元素,就像这个
$(document).on('keypress', function(e) {
var tag = e.target.tagName.toLowerCase();
if ( e.which === 119 && tag != 'input' && tag != 'textarea')
doSomething();
});
这会检查事件源自的元素event.target
的标记名,并且只有当事件不是源自输入或文本区域时才会触发函数。
如果事件处理程序绑定到document
,则该事件将已经在输入元素上引发并冒泡到html元素,因此必须在处理程序本身的代码中处理排除。另一种选择是为输入元素专门绑定第二个处理程序,以防止事件冒泡,但这可能不是正确的方法。
代码演示
$(function() {
$(document).keypress(function(e) {
if ($(e.target).is('input, textarea')) {
return;
}
if (e.which === 119) doSomething();
});
});
p.s.您可以查看jQuery事件对象文档,了解它公开了哪些属性。
在jQuery中,e.which
是规范化的属性,而不是e.keyCode
。
要检查您是否不在输入中,可以检查document.activeElement
:
$(document).keypress(function(e) {
if (e.which === 119 && !$(document.activeElement).is(":input,[contenteditable]")) {
doSomething();
}
});
演示。http://jsfiddle.net/pxCS2/1/
最简单和完美的解决方案是:
$(document).keypress(function(e) {
if (e.which == 119 && !$(':focus').length) {
doSomething();
}
});
相关文章:
- 尝试在PHP中回显输入文本时出现未定义的索引错误
- 使用模拟按键在输入框中自动输入文本
- 如何添加类,同时开始在文本字段中输入文本
- JQuery使用相同的功能自动完成各种输入文本
- 如何设置输入文本框jquery的值
- 输入文本框为空时的阻止按钮asp.网络表单
- 基于单选框更新页眉,选中并选择输入文本
- 将输入文本与某个选项的值相匹配并自动选择
- 如何在 JavaScript 中创建输入文本框
- 如何使用纯Javascript观看输入文本框
- 需要使用javascript获取输入文本,然后将其添加到句子中
- php&js-将电子邮件添加到输入文本中
- 动态启用/禁用来自控制器的输入文本
- .val()不返回输入文本
- 从确认框中预填充输入文本框
- 如何使用JavaScript解析输入文本中给定的数据
- 添加/删除/更改输入文本的部分值
- 根据输入文本按元素排序,AngularJS
- 如何将(a*b)两个输入文本值相乘,并在javascript中随文本变化动态显示
- 如何从Tr重复的输入文本中获取值