2011-01-19 29 views
14

object.stopPropagation()我可以停止事件冒泡,但我怎樣才能重新啓用它?Javascript:如何啓用stopPropagation?

js中是否有預定義的函數,如object.startPropagation

編輯:

的問題是,JS,如果你點擊「對象」比停止事件冒泡始終即使我不想要它,所以我想停止它記住:

document.getElementById("object").onclick = function(e){ 
    if(e && e.stopPropagation) { 
     e.stopPropagation(); 
    } else { 
      e = window.event; 
      e.cancelBubble = true; 
    } 
} 
+0

你可以添加更多的信息,即你​​想達到什麼。如果你叫停,我看不到需要啓動它。 – GenericTypeTea 2011-01-19 12:12:04

+0

我編輯了問題@GenericTypeTea – Adam 2011-01-19 12:16:02

回答

25

它根本不記得值。每次onclick被觸發時,新事件e都是新的。問題是,你總是取消事件冒泡:

if(foo) { 
    e.stopPropagation(); 
} else { 
    e.cancelBubble = true; 
} 
  • e.stopPropagation是防止事件冒泡的W3C方法 。
  • e.cancelBubble是Microsoft的 防止事件冒泡的方法。

它們都是一樣的。所以你每次都要取消事件的冒泡。更多閱讀here

你需要這樣它,如果你的條件得到滿足只取消冒泡更改方法:

document.getElementById("object").onclick = function(e) { 

    if(e && e.stopPropagation && someCriteriaToStopBubbling === true) 
    { 
     e.stopPropagation(); 
    } 
    else if (someCriteriaToStopBubbling === true) 
    { 
      e = window.event; 
      e.cancelBubble = true; 
    } 
} 

UPDATE: 記住,在當前的代碼,if (e && e.stopPropagation)總是爲真如果瀏覽器支持stopPropagation。如果它進入cancelBubble的第二個大括號,它將不記得上次設置的值。見this fiddle

基本上,總結一下,在您的代碼中,您每次點擊後都會取消傳播。您必須在函數中添加一些標準以確定是否取消元素層次結構中的傳播。