Javascript:如何启用stopPropagation?

时间:2011-01-19 12:05:02

标签: javascript events event-bubbling event-propagation

使用object.stopPropagation()我可以停止事件冒泡但是如何重新启用它?

js中是否有预先定义的函数,例如object.startPropagation

修改

问题是JS记得你是否点击“对象”而不是停止事件冒泡,即使我不想要它,所以我想阻止它:

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

1 个答案:

答案 0 :(得分:26)

根本不记得这个价值。每次e被触发时,事件onclick都是新的。问题是你总是取消事件冒泡:

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

他们都是一样的。所以你每次都要取消事件的冒泡。更多阅读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;
    }
}

<强>更新 请记住,在您当前的代码中,如果浏览器支持if (e && e.stopPropagation)stopPropagation将始终为true。如果它进入cancelBubble的第二个括号,它将不记得最后一次设置的值。见this fiddle

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