2010-01-08 55 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

相關問題