js如何取消事件传递?

摘要:如果在javascript中只希望事件发生在它的目标而不是在它的父元素上,即取消它的冒泡事件的发生,该如何做?因为按照javascript发生事件的顺序,它由两个阶段:分别从根元素--父元素--目标元素(捕获阶段),再到父元素--根元素

如果在javascript中只希望事件发生在它的目标而不是在它的父元素上,即取消它的冒泡事件的发生,该如何做?因为按照javascript发生事件的顺序,它由两个阶段:分别从根元素--父元素--目标元素(捕获阶段),再到父元素--根元素(冒泡阶段)。

IE浏览器和其他浏览器提供了不同的方式来取消事件冒泡行为。下列函数提供了两种方式取消事件冒泡:标准的W3C方式和非标准的IE方式。

function stopBubble(e){
   //如果传入事件对象且支持W3C的stopPropagation的用法        
    if(e && e.stopPropagation){
        //即为非IE浏览器
        e.stopPropagation();
    }else{
        //IE方式取消事件冒泡    
        window.event.cancelBubble=true;
 }


stopPropagation() 方法:

定义及用法:

不再派发事件。

终止事件在传播过程的捕获、目标处理或起泡阶段进一步传播。调用该方法后,该节点上处理该事件的处理程序将被调用,事件不再被分派到其他节点。

语法:

event.stopPropagation()

说明:

该方法将停止事件的传播,阻止它被分派到其他 Document 节点。在事件传播的任何阶段都可以调用它。注意,虽然该方法不能阻止同一个 Document 节点上的其他事件句柄被调用,但是它可以阻止把事件分派到其他节点。


cancelBubble方法:

获取或设置一个布尔值,表明当前事件是否要取消冒泡.

语法:

event.cancelBubble = bool;
var bool = event.cancelBubble;

bool 的值为true或false.

如果一个事件是可冒泡的,则它的cancelBubble属性的默认值为 false,代表允许该事件向上冒泡. 将cancelBubble属性设置为true以后,可以阻止该事件的进一步冒泡行为.

注:该特性已经从 Web 标准中删除,虽然一些浏览器目前仍然支持它,但也许会在未来的某个时间停止支持,请尽量不要使用该特性。

本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://shenqiku.cn/article/FLY_8043