js attachEvent ,addEventListener 和 on 绑定事件的区别

来源:互联网 发布:百佳软件商城 编辑:程序博客网 时间:2024/06/11 22:38

1、on 

       on绑定事件在IE,FF,Chrome,Safari,Mozilla,Opera下都适用。但是,同一个 dom 元素上,on 只能绑定一个同类型事件,后者会覆盖前者,不同类型的事件可以绑定多个。

d1.onclick = function(){console.log(111)}d1.onclick = function(){console.log(222)}//结果输出 222
d1.onclick = function(){console.log(111)}d1.onfocus = function(){console.log(222)}//结果输出 222,然后 111
2、attachEvent 和addEventListener

       同一个 dom 元素上,用 attachEvent 和 addEventListener 同类型事件可以绑定多个。但是 IE 只支持 attachEvent(IE11开始不支持了),而且事件执行的顺序是随机的,FF和Chrome只支持 addEventListener,事件执行顺序按照事件绑定的先后顺序执行,所以必须对2种方法做兼容处理。原理是先判断 attachEvent 是否为真,如果为真则用 attachEvent() ,否则用 addEventListener()。另外,为了避免每次绑定事件时做判断,可以封装成一个函数 myAddEvent(obj, ev, fn){}。

function myAddEvent(obj,ev,fn){//obj绑定事件的元素,ev事件名,fn函数if(obj.attachEvent){obj.attachEvent("on"+ev, fn);}else {obj.addEventListener(ev, fn, false);}}myAddEvent(d1,"click",function(){console.log(1111)});
3、addEventListener
     addEventListener() 方法第一个参数是事件名,不需要加 on,第二个参数是函数,第三个参数一般不写,默认为 false,在冒泡阶段处理函数,如果为 true,则是在捕获阶段处理函数。

<div id="box"> <div id="child"></div> </div>
box.addEventListener("click", function(){console.log("box");}, false);child.addEventListener("click", function(){console.log("child");});//执行顺序为 child             box
box.addEventListener("click", function(){console.log("box");}, true);child.addEventListener("click", function(){console.log("child");});//执行顺序为 box             child




阅读全文
0 0