Javascript 的addEventListener()及attachEvent()区别分析 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Mozilla中: addEventListener的使用方式: target.addEventListener(type, listener, useCapture); target: 文档节点、document、window 或 XMLHttpRequest 。 type: 字符串,事件名称,不含“on”,比如“click”、“mouseover”、“keydown”等 。 listener :实现了 EventListener 接口或者是 JavaScript 中的函数 。 useCapture :是否使用捕捉,一般用 false 。例如:document.getElementById("testText").addEventListener("keydown", function (event) { alert(event.keyCode); }, false); IE中: target.attachEvent(type, listener); target: 文档节点、document、window 或 XMLHttpRequest 。 type: 字符串,事件名称,含“on”,比如“onclick”、“onmouseover”、“onkeydown”等 。 listener :实现了 EventListener 接口或者是 JavaScript 中的函数 。 例如:document.getElementById("txt").attachEvent("onclick",function(event){alert(event.keyCode);}); W3C 及 IE 同时支持移除指定的事件, 用途是移除设定的事件, 格式分别如下: W3C格式: removeEventListener(event,function,capture/bubble); Windows IE的格式如下: detachEvent(event,function); target.addEventListener(type, listener, useCapture); target 文档节点、document、window 或 XMLHttpRequest 。 type 字符串,事件名称,不含“on”,比如“click”、“mouseover”、“keydown”等 。 listener 实现了 EventListener 接口或者是 JavaScript 中的函数 。 useCapture 是否使用捕捉,看了后面的事件流一节后就明白了,一般用 false 事件触发时,会将一个 Event 对象传递给事件处理程序,比如: document.getElementById("testText").addEventListener("keydown", function (event) { alert(event.keyCode); }, false); 适应的浏览器版本不同,同时在使用的过程中要注意 attachEvent方法 按钮onclick IE中使用 addEventListener方法 按钮click fox中使用 两者使用的原理:可对执行的优先级不一样,下面实例讲解如下: attachEvent方法,为某一事件附加其它的处理事件 。(不支持Mozilla系列) addEventListener方法 用于 Mozilla系列 举例: document.getElementById("btn").onclick = method1; document.getElementById("btn").onclick = method2; document.getElementById("btn").onclick = method3;如果这样写,那么将会只有medhot3被执行 写成这样: var btn1Obj = document.getElementById("btn1"); //object.attachEvent(event,function); btn1Obj.attachEvent("onclick",method1); btn1Obj.attachEvent("onclick",method2); btn1Obj.attachEvent("onclick",method3);执行顺序为method3->method2->method1 如果是Mozilla系列,并不支持该方法,需要用到addEventListener var btn1Obj = document.getElementById("btn1"); //element.addEventListener(type,listener,useCapture); btn1Obj.addEventListener("click",method1,false); btn1Obj.addEventListener("click",method2,false); btn1Obj.addEventListener("click",method3,false);执行顺序为method1->method2->method3 实例:(要注意的是div必须放到js前面才行) 复制代码 代码如下: <html> <head> </head> <body> <div id="name1" style="border:1px solid red;padding:10px 10px 10px 10px;" style="border:1px solid red;padding:10px 10px 10px 10px;"> <div id="name2" style="border:1px solid green;padding:10px 10px 10px 10px;" style="border:1px solid green;padding:10px 10px 10px 10px;">点击</div> </div> <div id="info"></div> <script type="text/javascript"><!-- var name1=document.getElementById(name1); //要注意 var name2=document.getElementById(name2); //要注意 var info=document.getElementById(info); if(name1.attachEvent){ //对于attachEvent前面的target我们一定要保证不为空 name1.attachEvent(onclick,function () { info.innerHTML += "红色" + "<br>"; }); name2.attachEvent(onclick,function () { info.innerHTML += "绿色" + "<br>"; }); }else{ name1.addEventListener(click,function () { info.innerHTML += "红色" + "<br>"; },false); name2.addEventListener(click,function () { info.innerHTML += "绿色" + "<br>"; },false); } // --></script> </body> </html> 从W3C的发展时间轴来看, DOM(Document Object Model)的模型可以分为两种, DOM 0 及 DOM 2. 从数字来看就可以知道DOM 0 当然是比较旧的协议, 我们可以从以下的表格来看: DOM1 协定:
新的DOM2 用法可以addEventListener()这个函数来观察到: addEventListener(event,function,capture/bubble); 参数event如上表所示, function是要执行的函数, capture与bubble分别是W3C制定得两种时间模式,简单来说capture就是从document的开始读到最后一行, 再执行事件, 而bubble则是先寻找指定的位置再执行事件. window.attachEvent(”submit”,myFunction()); 比较特别的是attachEvent不需要指定capture/bubble的参数, 因为在windows IE环境下都是使用Bubble的模式.这里用图像的Rollover例子来表现事件的用法: <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01//EN” function rollover() { 上述的 typeof window.addEventListener != “undefined” 程序代码可以判断使用者的浏览器是否支持AddEventListener这个事件模型, 如果不支持就使用attachEvent. W3C 及 IE 同时支持移除指定的事件, 用途是移除设定的事件, 格式分别如下: W3C格式: removeEventListener(event,function,capture/bubble); Windows IE的格式如下: detachEvent(event,function); 数据参考: Chapter 14 - Browsers and JavaScript, JavaScript Step by Step, by Steve Suehring |