2011-01-19 100 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

基本上,总结一下,在您的代码中,您每次点击后都会取消传播。您必须在函数中添加一些标准以确定是否取消元素层次结构中的传播。