如何判断事件是否已调用“ stopImmediatePropagation()”?

时间:2018-06-25 03:24:28

标签: javascript javascript-events

我正在将本机Event类用于我自己的对象模型。

我发现并利用了Event.stopBubbling属性,该属性在调用Event.stopPropagation()之后确实设置为true。但是我似乎找不到任何Event.stopImmediatePropagation()修改过的特殊属性。

如何确定事件是否调用了stopImmediatePropagation()

它是否修改了任何属性,或者我可以听一些钩子?

1 个答案:

答案 0 :(得分:1)

使用jQuery:

如果您使用jQuery的stopImmediatePropagation,那么我会在其GitHub存储库中看到以下jQuery代码。

https://github.com/jquery/jquery/blob/899c56f6ada26821e8af12d9f35fa039100e838e/src/event.js#L594

以下是stopImmediatePropagation的定义:

stopImmediatePropagation: function() {
    var e = this.originalEvent;

    this.isImmediatePropagationStopped = returnTrue;

    if ( e && !this.isSimulated ) {
        e.stopImmediatePropagation();
    }

    this.stopPropagation();
}

所以看来Event.isImmediatePropagationStopped是找出所需内容的方法。

没有jQuery:

如果您要在没有jQuery的情况下实现相同的目标,那么我认为没有本机的方法可以找出stopImmediatePropagation是否真正被调用。但是以下代码可用于覆盖原始的stopImmediatePropagation并使它像上面一样工作。

stopImmediatePropagationOriginal = Event.prototype.stopImmediatePropagation;
Event.prototype.stopImmediatePropagation = function(event){
    stopImmediatePropagationOriginal.bind(this).call(event);
    this.isImmediatePropagationStopped=true;
};

因此,使用上述代码,您可以使用Event.isImmediatePropagationStopped来查找所需的内容。