Javascript 从分配给正文的按键处理程序中排除表单字段

Javascript 从分配给正文的按键处理程序中排除表单字段,javascript,dom-events,keypress,onkeypress,event-propagation,Javascript,Dom Events,Keypress,Onkeypress,Event Propagation,我在网页上为body元素分配了一个keypress处理程序。我真的希望它在网页的任何地方都是活跃的。至少我是这么想的。文本输入表单中的keypress事件也会激活body处理程序,这很有意义,但我不希望这样 理想情况下,我希望将keypress处理程序分配给body元素,并以某种方式仅排除输入表单。是否有任何方法可以在输入级别停止事件并防止它传播到正文?(或者这是查看HTML DOM事件的正确方法吗?只需在您的按键处理程序中检查哪个元素触发了事件,并过滤掉输入元素就更容易了: document.

我在网页上为body元素分配了一个
keypress
处理程序。我真的希望它在网页的任何地方都是活跃的。至少我是这么想的。文本输入表单中的
keypress
事件也会激活body处理程序,这很有意义,但我不希望这样


理想情况下,我希望将
keypress
处理程序分配给body元素,并以某种方式仅排除输入表单。是否有任何方法可以在输入级别停止事件并防止它传播到正文?(或者这是查看HTML DOM事件的正确方法吗?

只需在您的按键处理程序中检查哪个元素触发了事件,并过滤掉输入元素就更容易了:

document.onkeypress = function(evt) {
    evt = evt || window.event;
    var target = evt.target || evt.srcElement;
    if ( !/INPUT|TEXTAREA|SELECT|BUTTON/.test(target.nodeName) ) {
        // Do stuff
    }
};

那太明显了。谢谢