1、事件分为事件冒泡(IE)和事件捕获2种,冒泡是由目标事件向上,一次到document,body的过程,事件捕获是由body向下,到document,目标事件的过程。
2、DOM2定义了2种处理事件的方法,分别是addEventListener()添加事件监听和removeEventListener()删除事件监听,他们分别传入3个参数,第一个参数是事件类型,第二个参数是处理事件的函数,第三个参数是一个布尔类型,如果要在事件冒泡中传入函数设置为false,如果在事件监听中传入函数则设为true.
<div id="btn">我是测试事件监听的</div> <script> var Btn=document.getElementById("btn"); var handler=function(){ alert(this.id); };// Btn.addEventListener("click",handler,false);//如果这里不是handler而是直接传入匿名函数,就会导致这个匿名函数永远无法被删除 Btn.removeEventListener("click",handler,false); </script>
3、IE有自己的事件处理程序,attach()添加事件处理,detach()删除事件,他们传入2个参数,第一个参数是处理的事件类型,(注意这里需要添加点击事件的时候不是click而是onclick),第二个参数是处理事件的函数
<div id="btn">我是IE事件处理<div> var Btn=document.getElementById("btn"); var handler=function(){ alert(this.id); }; Btn.attachEvent("onclick",handler); Btn.detachEvent("onclick",handler);
4、跨浏览器的事件处理,创建事件的方法用addHandler();删除事件的方法用removeHandler,他俩都属于一个对象EventUntil,他俩都接收3个参数(要操作的元素,事件的类型,事件的处理函数);
var EventUtil={ addHandler:function(element,type,handler) { if(element.addEventListener){ element.addEventListener(type,handler,false) }else if(element.attachEvent) { element.attachEvent("on"+type,handler) }else{ element["on"+type]=handler } }, removeHandler:function(element,type,handler) { if(element.removeElementListener){ element.removeElementListener(type,handler,false) }else if(element.detachEvent){ element.detachEvent(type,handler) }else{ element["on"+type]=null; } } }