在javascript事件中,如何确定已调用stopPropagation()?

时间:2011-08-31 15:50:55

标签: javascript javascript-events triggers

如果调用了e.preventDefault(),可以在e.defaultPrevented方法中看到。

e.stopPropagation()是否有类似的属性?如果没有,如何确定?

3 个答案:

答案 0 :(得分:7)

我没有通过jQuery查看他们的方法,但似乎你可以覆盖基础stopPropagation对象上的Event方法,设置一个标志,然后调用重写方法。 / p>

类似的东西:

var overriddenStop =  Event.prototype.stopPropagation;
Event.prototype.stopPropagation = function(){
    this.isPropagationStopped = true;
    overriddenStop.apply(this, arguments);
}

答案 1 :(得分:5)

不,没有。

我可以说,因为jQuery的isPropagationStopped()方法在内部不使用任何浏览器API,而是手动实现此功能。 (如果浏览器中有这样的功能 - 内置 - jQuery会使用它而不是手动执行。)

因此,在jQuery中,新的事件对象将获得此属性(继承):

isPropagationStopped: returnFalse

然后,当您在该事件对象上调用stopPropagation()时,jQuery将手动更改此属性:

stopPropagation: function() {
    this.isPropagationStopped = returnTrue;
    ...
}

returnFalsereturnTrue是分别返回falsetrue的函数。

答案 2 :(得分:0)

在IE中,您可以检查属性e.cancelBubble以检查本机停止。其他浏览器没有此功能。

但是,您可以自己跟踪它。由于它的性质,你无法在任何地方检查它,除了在停止传播本身的同一个处理程序中(事件不会冒泡,更多处理程序不会被调用),所以我可以'想象一下有必要的情况。你想做什么?

编辑:我认为你最初使用的是jQuery。对于那些: 您可以使用e.isPropagationStopped()方法,该方法将检查jQuery是否已停止传播。如果传播在本地停止,这将无法分辨。