仅当未写入时获取javascript键控事件
可能重复:仅当未写入时获取javascript键控事件,javascript,keydown,Javascript,Keydown,可能重复: 我写了一个简短的脚本来监听keydown事件,但是如果我在文本字段中写作,我想忽略它 我不知道如何在没有奇怪技巧的情况下完成,比如检查是否有一个输入的焦点 这是我的密码 document.addEventListener('keydown', function(event) { if(event.keyCode == 71) { showSelected(); } else if(event.keyCode == 13) {
我写了一个简短的脚本来监听keydown事件,但是如果我在文本字段中写作,我想忽略它 我不知道如何在没有奇怪技巧的情况下完成,比如检查是否有一个输入的焦点 这是我的密码
document.addEventListener('keydown', function(event) {
if(event.keyCode == 71) {
showSelected();
}
else if(event.keyCode == 13) {
closeModal();
}
});
如果您使用
contenteditable
(比如让用户在页面上想要的任何div/span/box中写入文本),这就有点棘手了
如果是这样的话,这将需要一点思考和返工(这不是那么难-只是更多的参与)
但是,您可以对照要排除的类型列表,检查event.target
(事件发生的元素)的标记名属性
function keyEvent (evt) {
var key = evt.keyCode,
el = evt.target,
type = el.tagName.toLowerCase();
// tag names are upper-case... almost always...
// so convert one way or the other, to be sure
if (type === "input" || type === "textarea") { return; }
/* do whatever you were going to do */
}
还应该注意的是,这个解决方案(以及到目前为止您的代码)与隔离区IE不兼容。
为此,您需要使用attachEvent
和window.event
和window.event.srcElement
属性,因为它们不支持addEventListener
和e
/事件
函数参数。只需检查事件.target
{
if (event.target.tagName.toUpperCase() == 'INPUT') return false;
// Do your Coding
}
一个糟糕的解决方案是将keydown侦听器添加到所有输入字段并停止传播。应该有一个更聪明的解决方案。请看这里:人们不应该忘记select
元素等。实际上,我在实现这样一个功能时使用了evt.target.matchesSelector(“form*”)
。您可以检查它是否是contenteditable
元素,带有event.target.iscontenteeditable
。