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

cc *_*ung 11 javascript triggers javascript-events

如果e.preventDefault()被调用,可以看到反映在e.defaultPrevented方法中.

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

Jos*_*ell 7

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

就像是:

var overriddenStop =  Event.prototype.stopPropagation;
Event.prototype.stopPropagation = function(){
    this.isPropagationStopped = true;
    overriddenStop.apply(this, arguments);
}
Run Code Online (Sandbox Code Playgroud)

  • 我担心这是一个[坏主意](http://perfectionkills.com/whats-wrong-with-extending-the-dom/) (4认同)
  • 这有助于我调试代码中某个事件停止冒泡的位置.原来是bootstrap :)谢谢! (2认同)

Šim*_*das 5

不,没有.

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

所以,在jQuery中,一个新的事件对象将获得这个属性(继承):

isPropagationStopped: returnFalse
Run Code Online (Sandbox Code Playgroud)

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

stopPropagation: function() {
    this.isPropagationStopped = returnTrue;
    ...
}
Run Code Online (Sandbox Code Playgroud)

returnFalsereturnTrue是其返回功能falsetrue分别.