js dom 阻止事件冒泡,阻止事件的默认行为

参考博客: https://www.cnblogs.com/plane-hjh/p/7880131.html

https://www.cnblogs.com/leftJS/p/10948138.html

http://caibaojian.com/javascript-stoppropagation-preventdefault.html

https://www.cnblogs.com/gopark/p/9579062.html
 
 

 阻止事件冒泡http://caibaojian.com/javascript-stoppropagation-preventdefault.html

 
1 两种方式来阻止事件捕获和冒泡 。

在正常的开发过程中,如果想要阻止事件的传播,通过一个方法实现。

    在微软的模型中,你必须设置事件的cancelBubble的属性为true

window.event.cancelBubble = true

    在w3c模型中你必须调用事件的stopPropagation()方法

e.stopPropagation()//阻止事件冒泡

event. stopImmediatePropagation()//可以阻止掉同一事件的其他优先级较低的侦听器的处理(这货表示没用过,优先级就不说明了,谷歌或者问度娘吧。)

通过调用这些方法会阻止所有冒泡向外传播。跨浏览器解决方案:

function doSomething(e) {

 if (!e) {

 var e = window.event;

 e.cancelBubble = true;

 }

 if (e.stopPropagation) {

 e.stopPropagation();

 }

}

 

 

2  阻止事件的默认行为,例如click <a>后的跳转~ 


  • 在IE下设置window.event.returnValue = false; 

  • 在W3c中,使用preventDefault()方法; //阻止元素默认的行为,如链接的跳转、表单的提交;

  event.target与event.currentTarget他们有什么不同?

  target在事件流的目标阶段;currentTarget在事件流的捕获,目标及冒泡阶段。只有当事件流处在目标阶段的时候,两个的指向才是一样的, 而当处于捕获和冒泡阶段的时候,target指向被单击的对象而currentTarget指向当前事件活动的对象(一般为父级)。

javascript的return false只会阻止默认行为,而是用jQuery的话则既阻止默认行为又防止对象冒泡。
下面这个使用原生js,只会阻止默认行为,不会停止冒泡
 
原文地址:https://www.cnblogs.com/hacker-caomei/p/14422570.html