在众多的方法里面,event.stopImmediatePropagation 算是比较少用的一个方法,拼写上感觉一半像 event.stopPropagation。
对于stopPropagation 的用法大家是众所周知的,他是W3C标准事件方法,用于阻止事件冒泡(非标准情况下,用window.event.stopBubble来阻止冒泡)而stopImmediatePropagation 的功能比stopPropagation 多一些,除了可以阻止事件冒泡之外,还可以把这个元素绑定的同类型事件也阻止了。先把下面的代码片断(摘自MDN)
paragraph
p标签绑定了三个click事件,div绑定了一个click事件。
其中p第二个click事件中使用了event.stopImmediatePropagation();当点击时P标签时,第一和第二个alert会正常出现,第三个alert被event.stopImmediatePropagation();的特性取消了以后的同类型(click)事件第四个alert不出来同被阻止了事件冒泡,所以也不会出现。相当于做了event.stopPropagation()后,再return false; jQuery对事件代理做了类似的封装。我们了解特性之后,看一个简单应用场景:假设点击一个按钮后,需要检测两个input控件的值,值为空时打印'error',并停止检测下一个input,同时也需停止提单提交。
我们通常可能会这样写:但用了event.stopImmediatePropagation时,可以对代码进行更好的抽象。
题外:
event.isImmediatePropagationStopped 可以用来确定该元素是否有调用过event.stopImmediatePropagation。浏览器支持情况:
Firefox >=10ChromeIE >= 9OperaSafari