addEventListener,attachEvent

addEventListener是js填加事件;用法如下:

target.addEventListener(type,listener,useCapture)

target: 文档节点、document、window 或 XMLHttpRequest。
type:
字符串,事件名称,不含“on”,比如“click”、“mouseover”、“keydown”等。
listener :实现了
EventListener 接口或者是 JavaScript 中的函数。也就是function之类的。 
useCapture :是否使用捕捉,一般用 false

例如:document.getElementById("testText").addEventListener("keydown", function
(event) { alert(event.keyCode); }, false);

主要理解下第三个参数 useCapture;如果为true则是capture捕获事件,如果是false则是budding冒泡事件,(关于冒泡事件和捕获事件可以参考文章:http://www.cnblogs.com/MissBean/p/4256235.html)

看个例子感受下:

1   <div id="div_test">
2         <input type="button" id="btn_test" value="测测" />
3     </div>
 1    <script type="text/javascript">
 2         window.onload=function(){
 3             document.getElementById("div_test").addEventListener("click",test1,false);
 4             document.getElementById("btn_test").addEventListener("click",test2,false);
 5         }
 6         function test1(){
 7          alert("外层div触发")
 8         }
 9         function test2(){
10             alert("内层input触发")
11         }
12     </script>

第三行和第四行都是false。所以是冒泡事件,会先触发子级事件也就是test2,再触发父级,也就是test1.

如果将三四行的false改成true,则是捕获事件,会先触发父级事件再触发子级事件;

但是如果一个是false一个是true呢?此时要看最父级是true还是false,最父级是true则捕获,false则冒泡;此例中,div_test是父级,所以看第三行是true还是false,决定是捕获还是冒泡。

IE中,因为之前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);});

想要让它兼容所有浏览器,可以做一个判断

1   <div class="box">
2         <input type="button" value="按钮1" id="btn1" onclick="showE();" />
3         <input type="button" value="按钮2" id="btn2" />
4         <input type="button" value="按钮3" id="btn3" />
5     </div>
 1   function showE(){
 2         console.log(1111);
 3     }
 4   var eventUntil={
 5         addHandler:function (element,type,handler){
 6             if(element.addEventListener){
 7                 element.addEventListener(type,handler,false);
 8             }else if(element.attachEvent){
 9                 element.attachEvent(‘on‘+type,handler)
10             }else{
11                 element[‘on‘+type]=handler;
12             }
13         },
14         removeHandler:function (element,type,handler){
15             if(element.removeEventListener){
16                 element.removeEventListener(type,handler,false);
17             }else if(element.detachEvent){
18                 element.attachEvent(‘on‘+type,handler)
19             }else{
20                 element[‘on‘+type]=null;
21             }
22         }
23     }
24     eventUntil.addHandler(obtn3,"click",showE)

上面6-12行是做判断,这样就兼容了所有浏览器

时间: 2024-10-25 20:26:34

addEventListener,attachEvent的相关文章

addEventListener或attachEvent都可以用bind代替

jquery addEventListener或attachEvent都可以用bind代替吗? meinxiaoo11级分类:汇编语言被浏览244次2013.11.12 木子的矫情范er 采纳率:41%11级2013.11.12 是的.不过对于绝大多数事件都有更简单的方法而不用bind,比如对click事件就有click函数能绑定: $("#div").click(function(){alert("clicked!");});

addEventListener和attachEvent二者绑定的执行函数中的this不相同【转载】

yuanwen http://www.jb51.net/article/32511.htm 写 addEventListener 和 attachEvent 区别的博文不少,不过大部分都把重点放置于前者是Firefox chrome,后者只是存在于IE系列中 写 addEventListener 和 attachEvent 区别的博文不少,不过大部分都把重点放置于前者是Firefox chrome,后者只是存在于IE系列中. 最近在写一个事件代理的时候,遇到一个BUG,发现除此外,二者绑定的执行

js绑定事件方法:addEventListener与attachEvent的不同浏览器的兼容性写法

js的事件绑定方法中,ie仅仅支持attachEvent,而FF和Chrome仅仅支持addEventListener,所以就必须为这两个方法做兼容处理,原理是先推断attachEvent仅仅否为真(存在),假设为真则用attachEvent()方法.否则的话就用addEventListener(). 另外,为了避免每次绑定事件时都要做推断.能够封装一个函数myAddEvent(obj,ev,fn){}. 代码例如以下: <!DOCTYPE html> <html> <hea

addEventListener和attachEvent以及element.onclick的区别

attachEvent是ie添加事件处理程序,接收两个参数,其中事件类型名称要加"on", 可以添加多个事件处理程序,按照添加顺序相反的顺序触发; addEventListener是给非ie添加事件处理程序,接收三个参数,第一个是事件名,不需要加“on”, 第二个是绑定的函数,第三个参数是一个布尔值,是事件的方式,意思是是否使用useCatch方式, 如果是false,就使用传统的冒泡方式,如果为true,就在捕获阶段调用事件处理程序. addEventListener可以添加多个事件

javascript中 addEventListener和attachEvent以及element.onclick的区别

attachEvent是ie添加事件处理程序,接收两个参数,其中事件类型名称要加"on", 可以添加多个事件处理程序,按照添加顺序相反的顺序触发; addEventListener是给非ie添加事件处理程序,接收三个参数,第一个是事件名,不需要加"on", 第二个是绑定的函数,第三个参数是一个布尔值,是事件的方式,意思是是否使用useCatch方式, 如果是false,就使用传统的冒泡方式,如果为true,就在捕获阶段调用事件处理程序. addEventListen

addEventListener 与attachEvent

第一:简单的通用方法(IE && FF) window.onload = function(){ var oDiv = document.getElementById("J_myDiv"); //找到对象 oDiv.onclick = function(){ //设置事件监听函数 alert("click"); }} 缺点:1.添加单一事件 2.不能删除事件 第二:IE中监听函数 var oDiv; function fnClick(){ alert

addEventListener和attachEvent的区别(转载)

attachEvent 与addEventListener到底有什么区别呢?总结如下: 一.适应的浏览器版本不同 attachEvent--兼容:IE7.IE8:不兼容firefox.chrome.IE9.IE10.IE11.safari.opera addEventListener--兼容:firefox.chrome.IE.safari.opera:不兼容IE7.IE8 二.针对的事件不同 attachEvent中的事件带on   而addEventListener中的事件不带on if(o

Javascript添加事件的addEventListener()及attachEvent()区别分析

Mozilla中: addEventListener的使用方式: target.addEventListener(type, listener, useCapture); target: 文档节点.document.window 或 XMLHttpRequest. type: 字符串,事件名称,不含“on”,比如“click”.“mouseover”.“keydown”等. listener :实现了 EventListener 接口或者是 JavaScript 中的函数. useCapture

addEventListener和attachEvent主要有几个区别

1. 参数个数不相同,这个最直观,addEventListener有三个参数,attachEvent只有两个,attachEvent添加的事件处理程序 只能发生在冒泡阶段,addEventListener第三个参数可以决定添加的事件处理程序是在捕获阶段还是冒泡阶段处理(我们一般为了浏览器兼容性都 设置为冒泡阶段) 2. 第一个参数意义不同,addEventListener第一个参数是事件类型(比如click,load),而attachEvent第一个参数指明的是事件处理函数名称(onclick,