Javascript:如何启用stopPropagation?

Ada*_*dam 14 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

djd*_*d87 26

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

if(foo) {
    e.stopPropagation();
} else {
    e.cancelBubble = true;
}
Run Code Online (Sandbox Code Playgroud)
  • e.stopPropagation 是阻止事件冒泡的W3C方法.
  • e.cancelBubble 是防止事件冒泡的Microsoft方法.

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

您需要更改方法,以便只有在符合条件时才取消冒泡:

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

    if(e && e.stopPropagation && someCriteriaToStopBubbling === true) 
    {
        e.stopPropagation();
    } 
    else if (someCriteriaToStopBubbling === true)
    {
          e = window.event;
          e.cancelBubble = true;
    }
}
Run Code Online (Sandbox Code Playgroud)

更新: 请记住,在您当前的代码中,if (e && e.stopPropagation)如果浏览器支持,将始终为true stopPropagation.如果它进入第二个括号cancelBubble,它将不记得最后一次设置的值.看到这个小提琴.

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