2

可能重复:
主体上的 Javascript 事件处理程序而不是输入

我写了一个简短的脚本来监听 keydown 事件,但如果我在文本字段中写入,我想忽略它。

我不知道如何在没有奇怪技巧的情况下做到这一点,例如检查是否专注于其中一个输入。

这是我现在的代码。

document.addEventListener('keydown', function(event) {
    if(event.keyCode == 71) {
        showSelected();
    }
    else if(event.keyCode == 13) {
        closeModal();
    }
});
4

2 回答 2

4

contenteditable如果你正在做一些事情(比如让用户在他们想要在页面上的任何 divs/spans/boxes 中写入文本),这有点棘手。

如果是这样,这将需要一些思考和修改(这并不- 只是更多的参与)。

但是,您可以根据要排除的类型列表检查event.target(事件发生的元素)的属性。tagName

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 */
}

还应该注意的是,这个解决方案(以及到目前为止的代码)与 ghetto-IE 不兼容。为此,您需要使用attachEventandwindow.eventwindow.event.srcElement属性,因为它们不支持addEventListenere/event函数参数。

于 2012-09-17T16:20:54.473 回答
1

只需检查event.target

{ 
   if (event.target.tagName.toUpperCase() == 'INPUT') return false;

    // Do your Coding
}
于 2012-09-17T16:35:20.827 回答