原生js的事件绑定方式有几种?
估计大家所认为的三种大概是如下三种:
// 第一种:直接绑定在dom上
click
// 第二种,使用onclick document.getElementById("xxx").onclick = function(){ }; // 第三种:使用推荐的标准模式 document.getElementById("xxx").addEventListener("click",function(e){ });
标准事件流
Dom标准事件流的触发的先后顺序为:先捕获再冒泡。即当触发
dom事件时,会先进行事件捕获,捕获到事件源之后通过事件传播进行事件冒泡。
在我们平常用的addEventListener方法中,一般只会用到两个参数,一个是需要绑定的事件,另一个是触发事件后要执行的函数,然而addEventListener还可以传入第三个参数:
element.addEventListener(event, function, useCapture);
第三个参数默认值是false,表示在事件冒泡阶段调用事件处理函数;如果参数为true,则表示在事件捕获阶段调用处理函数。如果不写第三个参数则默认在事件冒泡阶段调用事件处理函数。
事件委托(事件代理)
就是利用事件冒泡,把子元素的事件都绑定到父元素上(如果子元素阻止了事件冒泡,那么委托就无法实现)。
优点:
1.替代循环绑定事件的操作,减少内存消耗,提高性能。比如:
在table上代理所有td的click事件。
在ul上代理所有li的click事件。
2.简化了dom节点更新时,相应事件的更新。比如:
不用在新添加的li上绑定click事件。
当删除某个li时,不用移解绑上面的click事件。
自定义事件
如何创建?