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,然后 1112、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函数3、addEventListener
if(obj.attachEvent){
obj.attachEvent("on"+ev, fn);
}else {
obj.addEventListener(ev, fn, false);
}
}
myAddEvent(d1,"click",function(){
console.log(1111)
});
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