mat*_*att 46 javascript jquery keypress
我有这个 …
$(document).keypress(function(e) {
if ( e.keyCode === 119 ) // w
doSomething();
});
Run Code Online (Sandbox Code Playgroud)
在我的文件上按"w"时,该doSomething()
功能会激活.当我正在input
现场打字(聚焦)时,如何防止它被触发textarea
?
ade*_*neo 82
您必须在事件之后过滤掉元素,而不是在选择器中过滤掉,就像这样
$(document).on('keypress', function(e) {
var tag = e.target.tagName.toLowerCase();
if ( e.which === 119 && tag != 'input' && tag != 'textarea')
doSomething();
});
Run Code Online (Sandbox Code Playgroud)
这将检查event.target
事件源自的元素的标记名,并仅在事件不是来自输入或textarea时触发函数.
nbr*_*oks 13
如果绑定了事件处理程序document
,则事件将在输入元素上引发并冒泡到html元素,因此您必须在代码中处理处理程序本身的排除.替代方法是专门绑定输入元素的第二个处理程序,以防止事件冒泡,但这可能不是正确的方法.
$(function() {
$(document).keypress(function(e) {
if ($(e.target).is('input, textarea')) {
return;
}
if (e.which === 119) doSomething();
});
});?
Run Code Online (Sandbox Code Playgroud)
ps你可以查看jQuery事件对象文档,看看它暴露了哪些属性.
在jQuery中,e.which
是规范化的属性,而不是e.keyCode
.
要检查您是否不在输入中,您可以检查document.activeElement
:
$(document).keypress(function(e) {
if (e.which === 119 && !$(document.activeElement).is(":input,[contenteditable]")) {
doSomething();
}
});
Run Code Online (Sandbox Code Playgroud)
演示.http://jsfiddle.net/pxCS2/1/
归档时间: |
|
查看次数: |
50265 次 |
最近记录: |