js事件传播流程
浏览器的默认行为
JavaScript事件本身所具有的属性,例如a标签的跳转,Submit按钮的提交,右键菜单,文本框的输入等。
js事件传播流程
DOM2级事件规定事件流包括三个阶段:事件捕获阶段、处于目标阶段、事件冒泡阶段
捕获阶段:先由文档的根节点document往事件触发对象,从外向内捕获事件对象;
目标阶段:到达目标事件位置(事发地),触发事件;
冒泡阶段:再从目标事件位置往文档的根节点方向回溯,从内向外冒泡事件对象。
事件阻止
阻止默认行为的方式
w3c的方法是e.preventDefault(),
IE则是使用e.returnValue = false;
return false;
自定义右键菜单 oncontextmenu
- event.preventDefault(); – 阻止元素的默认事件。
注:a元素的点击跳转的默认事件 ,
button,radio等表单元素的默认事件 ,
div 元素没有默认事件
例:
复制代码代码如下:
复制代码代码如下:
var samp = document.getElementByTagName(“a”);
samp.addEventListener(“click”,function(e){e.preventDefault()},false);
解释:点击链接的时候正常情况下会发生跳转,但是现在我们阻止了它的默认事件,即跳转事件,这时就不会跳转到百度了。
- event.stopPropagation(); – 阻止元素冒泡事件
注:嵌套元素一般都存在冒泡事件,会带来某些影响
例:
复制代码代码如下:
这里点击button的时候,浏览器会先后弹出3,2,1,本来只想让绑定在button上的事件发生,却无意中触发了它的两个父级上的事件,这里我们只是做了一个简单测试,试想如果在项目开发中,某个按钮和他的父级同时绑定了很重要的事件,那么结果会惨不忍睹。这时的处理方法就是阻止冒泡事件。
给input注册click事件,同时阻止它的冒泡事件
复制代码代码如下:
document.getElementById(‘c3’).addEventListener(‘click’,function(e){e.stopPropagation()},false);
OK!!!了