event.stopPropagation()和event.stopImmediatePropagation()之间有什么区别?


当前回答

1) event.stopPropagation (): 仅用于停止相应父处理程序的执行。

2) event.stopImmediatePropagation (): 它用于停止其相应的父处理程序的执行,也用于停止除当前处理程序外附加到自身的处理程序或函数的执行。 它还停止所有附加到整个DOM的当前元素的处理程序。

下面是示例:Jsfiddle!

谢谢, sahil聊

其他回答

我是一个后来者,但也许我可以用一个具体的例子来说明:

比如说,如果你有一个<表>,有<tr>和<td>。现在,假设你为<td>元素设置了3个事件处理程序,那么如果你在为<td>设置的第一个事件处理程序中执行event. stoppropagation(),那么<td>的所有事件处理程序仍将运行,但事件不会传播到<tr>或<表>(并且不会向上传播到<body>, <html>,文档和窗口)。

然而,现在,如果你在你的第一个事件处理程序中使用event. stopimmediatepropagation(),那么,<td>的其他两个事件处理程序将不会运行,并且不会传播到<tr>, <表>(并且不会向上和向上到<body>, <html>,文档和窗口)。

注意,它不仅仅适用于<td>。对于其他元素,它将遵循相同的原则。

jQuery API:

除了保留任何额外 元素的处理程序 执行后,此方法还将停止 通过隐式调用 event.stopPropagation()。简单地 防止事件冒泡到 祖先元素但允许其他元素 执行相同的事件处理程序 元素,我们可以使用 event.stopPropagation()。 使用 event.isImmediatePropagationStopped () 想知道这种方法是否曾经 调用(在该事件对象上)。

简而言之:event. stoppropagation()允许同一元素上的其他处理程序被执行,而event. stopimmediatepropagation()阻止每个事件运行。

1) event.stopPropagation (): 仅用于停止相应父处理程序的执行。

2) event.stopImmediatePropagation (): 它用于停止其相应的父处理程序的执行,也用于停止除当前处理程序外附加到自身的处理程序或函数的执行。 它还停止所有附加到整个DOM的当前元素的处理程序。

下面是示例:Jsfiddle!

谢谢, sahil聊

事件。stopPropagation将阻止父元素上的处理程序运行。 调用的事件。stopImmediatePropagation还将阻止同一元素上的其他处理程序运行。

stopPropagation将阻止任何父处理程序被执行。stopImmediatePropagation将阻止任何父处理程序和任何其他处理程序被执行

jquery文档中的快速示例:

美元(p) .click(函数(事件){ event.stopImmediatePropagation (); }); 美元(p) .click(函数(事件){ //该函数不会被执行 (美元). css(“背景颜色”,“# f00”); }); < script src = " https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js " > < /脚本> < p > < / p >例子

注意,事件绑定的顺序在这里很重要!

美元(p) .click(函数(事件){ //该函数将被触发 (美元). css(“背景颜色”,“# f00”); }); 美元(p) .click(函数(事件){ event.stopImmediatePropagation (); }); < script src = " https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js " > < /脚本> < p > < / p >例子