原生JS如何利用冒泡减少事件的触发,只代理给共有的父元素。
2017-02-15 12:12
453 查看
相信很多人都知道事件代理这个方法,因为在JQuery里面,已经封装好了。
但是如果用原生JS来写呢?相信有部分都会懵逼了….因为我曾经也是懵逼的一员
elem.addEventListener(“事件名”,callback,false/true);
为elem元素的指定”事件”,绑定callback回调函数
第三个参数: 设置是否在捕获阶段触发
如果你绑定了一个事件名,类似’click’、’mouseover’….等等一些事件
例如,如果你给某个绑定了click事件,那么当你点击该元素时,首先会从document开始捕获,一直捕获到你点击的目标元素,然后按照捕获阶段反向的顺序,依次执行各级父元素上的事件处理函数
整理下来就是:
2个阶段:
1. 捕获:由外向内,依次记录各级元素绑定的事件处理函数
捕获阶段只到目标元素截止
2. 冒泡: 按照捕获阶段反向的顺序,依次执行各级父元素上的事件处理函数
下面是代码的栗子
其实冒泡也可以取消。
取消冒泡: 执行完当前元素的事件处理函数后,阻止冒泡向上执行。
e.stopPropagation();
$(父元素).on('click','父元素下的子元素标签名',function(){...})
但是如果用原生JS来写呢?相信有部分都会懵逼了….因为我曾经也是懵逼的一员
elem.addEventListener(“事件名”,callback,false/true);
为elem元素的指定”事件”,绑定callback回调函数
第三个参数: 设置是否在捕获阶段触发
如果你绑定了一个事件名,类似’click’、’mouseover’….等等一些事件
例如,如果你给某个绑定了click事件,那么当你点击该元素时,首先会从document开始捕获,一直捕获到你点击的目标元素,然后按照捕获阶段反向的顺序,依次执行各级父元素上的事件处理函数
整理下来就是:
2个阶段:
1. 捕获:由外向内,依次记录各级元素绑定的事件处理函数
捕获阶段只到目标元素截止
2. 冒泡: 按照捕获阶段反向的顺序,依次执行各级父元素上的事件处理函数
下面是代码的栗子
<!DOCTYPE HTML> <html> <head> <title>取消与利用冒泡</title> <meta charset="utf-8"/> <link rel="stylesheet" href="css/3.css"/> </head> <body> <div id="keys"> <button>1</button> <button>2</button> <button>3</button> <button>4</button><br> <button>C</button> <button>+</button> <button>-</button> <button>=</button> </div> <textarea id="sc" style="resize:none;width:200px; height:50px;" readonly></textarea> <script> //为id为keys的元素绑定单击事件为: keys.addEventListener("click", function(e){ //获得目标元素,保存在target中 var target=e.target; //如果target是button if(target.nodeName=="BUTTON"){ //判断target的内容 switch(target.innerHTML){ case "C"://如果是C //清除id为sc的内容 sc.value=""; break; case "="://如果是= try{//错误处理 //将id为sc的内容,放入eval中,将结果再保存回id为sc的内容中 sc.value=eval(sc.value) }catch(err){//一旦出错 //将错误对象转为字符串,放入id为sc的内容中 sc.value=String(err); } break; default://其他 //将target的内容追加到id为sc的内容中 sc.value+= target.innerHTML; } } } ); </script> <a id="a1" href="#">click me</a> </body> </html>
其实冒泡也可以取消。
取消冒泡: 执行完当前元素的事件处理函数后,阻止冒泡向上执行。
e.stopPropagation();
相关文章推荐
- JS点击子元素不触发父元素点击事件(js阻止冒泡)
- 先看看解析,事件委托:也称事件代理 就是利用冒泡的原理 把加事件加到父级上,触发执行效果
- 事件代理中冒泡带来的问题----触发根元素自己的事件
- JS 防止父元素事件冒泡触发
- 什么是事件冒泡?如何用jquery/js阻止事件冒泡?阻止冒泡有什么作用?小生来抛个砖。
- 服务器按钮如何通过js验证再触发提交事件?
- 原生JS操作网页给p元素添加onclick事件及表格隔行变色
- W3C下的冒泡和捕获机制。到底是冒泡呢。还是捕获呢。一个DOM元素绑定多个事件时如何执行。
- js利用事件的阻止冒泡实现点击空白模态框的隐藏
- JS获取触发事件元素的方法
- 关闭页面的时候如何触发JS事件
- js获取触发事件元素在整个网页中的绝对坐标(示例代码)
- js获取触发事件元素在整个网页中的绝对坐标(示例代码)
- W3C下的冒泡和捕获机制。到底是冒泡呢。还是捕获呢。一个DOM元素绑定多个事件时如何执行。
- JS循环网页元素,手动触发事件
- js获取触发事件元素的坐标
- 2011-04-13 15:54 利用事件触发实现ActiveX调用js函数
- js阻止元素的默认事件与冒泡事件
- js利用事件的阻止冒泡实现点击空白模态框的隐藏