15

有了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;
    }
}
4

1 回答 1

27

它根本不记得值。e每次onclick触发该事件都是新的。问题是你总是取消事件冒泡:

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

他们都是一样的。所以你每次都取消事件的冒泡。更多阅读在这里

您需要更改方法,以便仅在满足您的条件时才取消冒泡:

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. 如果它进入第二个大括号 for cancelBubble,它不会记住最后设置的值。看到这个小提琴

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

于 2011-01-19T12:09:16.663 回答