在我的网站上,我为整个文档注册了一个按键事件处理程序。
$(document).keypress(myhandler);
我处理“空格”键以滚动列表。
麻烦的是,有一个<input type='text' />
元素,当输入输入时,我不希望'space'按键滚动列表。
我在JQuery传递给处理程序的“event”对象中找不到任何信息,以确定事件源的位置。
答案 0 :(得分:20)
或者,您可以将另一个事件处理程序附加到输入字段,并在此处理程序中停止事件的传播:
jQuery('#input-field-id').bind('keypress', function(e) {
e.stopPropagation();
});
这样,您可以保留全局事件处理程序。可能更清洁。
答案 1 :(得分:3)
您正在寻找event.target.id
,这将是该事件被引发的元素的ID。所以在myhandler
内你需要类似下面的内容
function myhandler(e) {
if (e.target.id !== 'id of input') {
/* rest of event handler */
}
}
答案 2 :(得分:1)
请参阅有关event order的QuirksMode文档,尤其是关于如何关闭特定于浏览器的事件。引用:
要获得完整的跨浏览器体验,请执行
function doSomething(e)
{
if (!e) var e = window.event;
e.cancelBubble = true;
if (e.stopPropagation) e.stopPropagation();
}