如果 e.preventDefault()
被称为,可以看到反映在 e.defaultPrevented
方法。
是否有类似的财产 e.stopPropagation()
?如果没有,如何确定?
如果 e.preventDefault()
被称为,可以看到反映在 e.defaultPrevented
方法。
是否有类似的财产 e.stopPropagation()
?如果没有,如何确定?
我没有通过jQuery查看他们的方法,但似乎你可以覆盖 stopPropagation
基础上的方法 Event
对象,设置一个标志,然后调用重写的方法。
就像是:
var overriddenStop = Event.prototype.stopPropagation;
Event.prototype.stopPropagation = function(){
this.isPropagationStopped = true;
overriddenStop.apply(this, arguments);
}
不,没有。
我可以告诉,因为jQuery的 isPropagationStopped()
method不在内部使用任何浏览器API,而是手动实现此功能。 (如果浏览器中有这样的功能 - 内置 - jQuery会使用它而不是手动执行。)
所以,在jQuery中,一个新的事件对象将获得这个属性(继承):
isPropagationStopped: returnFalse
然后,当你调用 stopPropagation()
在该事件对象上,jQuery将手动更改此属性:
stopPropagation: function() {
this.isPropagationStopped = returnTrue;
...
}
returnFalse
和 returnTrue
是返回的功能 false
和 true
分别。
在IE中,您可以查看酒店 e.cancelBubble
检查原生停留。其他浏览器没有此功能。
但是,您可以自己跟踪它。由于它的性质,你无法在任何地方检查它,除了在停止传播本身的同一个处理程序中(事件不会冒泡,更多的处理程序不会被调用),所以我可以'想象一下有必要的情况。你想做什么?
编辑:我认为你最初使用的是jQuery。对于那些:
你可以使用 e.isPropagationStopped()
方法,它将检查传播是否已从jQuery停止。如果传播本地停止,这将无法分辨。