原生js事件批量绑定-事件委托
2017-09-20 13:01
931 查看
我们常常会遇到一个需求,就是给表格里面的每个特定的td绑定一个事件.
遇到这种需求,很多人基本都会想到如下代码:var td = document.getElementsByTagName("td"); for( let i =0; i<td.length; i++){ td[i].onclick = function(){ //事件处理 } }
以上代码的确可以正常执行,但是当该类td很多是,效率会很低,占用的内存也会很大。
而比较好的方法是用事件委托的机制,事件委托主要是依靠一下两个特性。
1.浏览器事件的冒泡机制
浏览器的事件发生有一般有三个阶段(IE浏览器事件没有捕获阶段)。
事件捕获 ->事件目标 ->事件冒泡,事件冒泡会将事件从事件目标节点处一级一级向父节点传播,直到document对象。换句话说,我们可以在父节点处理子节点的事件。
2.事件对象的 event.target指向事件目标,即是事件发生的的具体节点
下面是事件委托的方法
这里假设只有一个table,且将事件的处理绑定到table中,当然也可以绑定在body或者td的父元素或其他祖先元素里。
var table = document.getElementsByTagName("table")[0]; if(window.attachEvent){ table.attachEvent("onclick",function(event){ //event.target即是点击处的元素。 if(event.target.nodeName !== "TD"){//这里通过元素名称过滤,也可以通过其他方法过滤。 return; } //事件处理逻辑 }); } else{ table.addEventListener("click",function(event){ if(event.target.nodeName !== "TD"){//这里通过元素名称过滤,也可以通过其他方法过滤。 return; } //事件处理逻辑 }); }
以上事件过滤是因为事件委托时,table下所有的元素都会触发事件,而我们需要处理的只是固定td而已。所以对与其他元素的事件,我们不用处理。
相关文章推荐
- js事件委托和jQuery事件绑定on , off , one , bind , unbind , die
- JS中的事件绑定,事件捕获,事件冒泡以及事件委托,兼容IE
- 原生JS绑定滑轮滚动事件,兼容浏览器
- 原生js绑定事件方法简单封装
- JavaScript之事件委托(附原生js和jQuery代码)
- js原生事件委托
- 原生js和jquery框架下绑定事件的方法
- 原生js绑定和解除事件
- 原生js事件委托与简单的jquery事件委托方法
- 原生js获取标签,绑定事件
- JS中批量给元素绑定事件过程中的相关问题使用闭包解决
- JS 事件绑定、事件监听、事件委托详细介绍
- JS 事件绑定、事件监听、事件委托详细介绍
- js实例分析JavaScript中的事件委托和事件绑定
- 为什么我推荐事件委托而不是批量绑定
- js事件委托和jQuery事件绑定on , off , one , bind , unbind , die
- js给每个li绑定不同事件(事件委托技术)
- JS 中的事件绑定、事件监听与事件委托
- js事件冒泡、事件绑定、事件监听、事件委托
- js原生事件委托的实现