如何只为一个元素禁用JQuery keypress事件?

时间:2009-11-10 14:42:01

标签: javascript jquery html event-handling

在我的网站上,我为整个文档注册了一个按键事件处理程序。

$(document).keypress(myhandler);

我处理“空格”键以滚动列表。

麻烦的是,有一个<input type='text' />元素,当输入输入时,我不希望'space'按键滚动列表。

我在JQuery传递给处理程序的“event”对象中找不到任何信息,以确定事件源的位置。

3 个答案:

答案 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();
}