如何绑定事件
1 elem.onxxx = function (event) {}
兼容性很好 但是一个元素只能绑定一个处理程序
基本等同于写在HTML行间样式表上
2 elem.addEventListener(type , func(){} , false);
type为事件类型且要写为字符串形式 func为处理函数
IE9以下不兼容 可以为一个事件绑定多个处理程序
如
<script>
var div = document.getElementsByTagName('div')[0];
div.addEventListener('click',function (){
console.log('a');
},false)
div.addEventListener('click',function (){
console.log('a');
},false)
//这样写点击时会触发两次 如果里面传的是同一个函数引用 那么只会触发一次
//div.addEventListener('click',test,false)
//div.addEventListener('click',test,false)
//function test(){
//console.log('a');
//}
</script>
3 elem.attachEvent(‘on’ + type, func);
IE独有 一个事件同样可以绑定多个处理程序
事件处理程序的运行环境
1 elem.onxxx = function (event) {}
程序的this指向dom元素本身
2 obj.addEventListener(type, func(){}, false);
程序的this指向dom元素本身
3 obj.attachEvent(‘on’ + type, func(){});
程序的this指向window
要想让this指向obj对象 那可以把事件处理函数写在外部 然后在function中执行事件处理函数
并通过call改变this指向
如
div.attachEvent(‘onclick’, function(){
handleFunc.call(div);
});
function handleFunc(){}
封装兼容性的 addEvent(elem, type, handleFunc); 方法 给dom对象添加该事件类型的处理函数
<script>
function addEvent(elem,type,handleFunc){
if(elem.addEventListener){
elem.addEventListener(type,handleFunc,false);
}else if(elem.attachEvent){
elem.attachEvent('on'+type,function(){
handleFunc.call(elem);
})
}else{
elem['on'+type] = handleFunc;
}
}
</script>
解除事件处理程序
1 elem.onclick = false/ ‘’ /null;
2 elem.removeEventListener(type, func(){}, false);
3 elem.detachEvent(‘on’ + type, func(){});
注:若绑定的是匿名函数,则无法解除
即若想解除事件处理程序 那么只能把事件函数写在外部 再将事件函数引用传递给形参