如何绑定事件
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(){});
注:若绑定的是匿名函数,则无法解除
即若想解除事件处理程序  那么只能把事件函数写在外部  再将事件函数引用传递给形参
