2010-01-08 35 views
5

我将两个事件处理程序绑定到'keydown'上的输入字段。如果按下Enter键,则第一个事件处理程序需要停止事件的传播,以便它不会触及第二个事件处理程序。我是这样做的:jquery firefox stopPropagation()

if (jQuery.browser.msie) { 
        event.cancelBubble = true; 
       } else { 
        event.stopPropagation(); 
       } 

现在,这本身并不能阻止IE或Firefox中的事件传播。它命中第一个事件处理程序,然后再次命中第二个事件处理程序。但是,在第二个事件处理程序中,我实际上可以在IE中检查是否(e.cancelBubble)。有没有办法检查相同的Firefox?

回答

13

只是删除你的测试的IE浏览器,并使用此:

event.stopImmediatePropagation(); 

这将让其他事件在这两种浏览器发射。

event.stopPropagation()将防止冒泡事件,但不会让其他事件处理程序保持同一对象不被触发。

要回答您的其他问题,如果您刚使用event.stopPropagation(),则可以在第二个处理程序中检查event.isPropagationStopped()

建议:作为一般规则,jQuery完全提取所有浏览器行为以提供功能的单一接口。如果在运行jQuery函数之前发现自己正在运行if(jQuery.browser.msie),那么运行它可能会有更好的方式来运行跨浏览器。而且,当您需要测试时,您应该使用jQuery.support来测试功能而不是特定的浏览器嗅探。

+2

哇人,这就像一个魅力工作!我甚至没有使用isPropagationStopped(),因为stopImmediatePropagation()实际上起作用了!非常感谢。 – Riz 2010-01-08 18:53:53

+0

这真的很有帮助。 – Nick 2012-04-11 05:34:16

相关问题