代码之家  ›  专栏  ›  技术社区  ›  HRJ

如何仅为一个元素禁用jquery keypress事件?

  •  14
  • HRJ  · 技术社区  · 15 年前

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

    $(document).keypress(myhandler);
    

    我用空格键滚动列表。

    问题是,有一个 <input type='text' /> 元素,我不希望在输入列表时按“空格”键滚动列表。

    我在jquery传递给处理程序的“event”对象中找不到任何信息,无法确定事件源在哪里。

    3 回复  |  直到 13 年前
        1
  •  20
  •   Tim Cooper    13 年前

    或者,您可以将另一个事件处理程序附加到输入字段,并在此处理程序中停止事件的传播:

    jQuery('#input-field-id').bind('keypress', function(e) {
        e.stopPropagation(); 
    });
    

    这样,就可以保持全局事件处理程序的原样。可能更干净。

        2
  •  3
  •   Russ Cam    15 年前

    你在找 event.target.id ,它将是引发事件的元素的ID。所以在里面 myhandler 你需要如下的东西

    function myhandler(e) {
        if (e.target.id !== 'id of input') {
            /* rest of event handler */
        }
    }
    
        3
  •  1
  •   Eemeli Kantola    15 年前

    参见QuirksMode文档 event order ,尤其是关于如何关闭特定于浏览器的事件。报价:

    要获得完整的跨浏览器体验,请执行以下操作

    function doSomething(e)
    {
        if (!e) var e = window.event;
        e.cancelBubble = true;
        if (e.stopPropagation) e.stopPropagation();
    }