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)

看个例子感受下:

   <div id="div_test">
<input type="button" id="btn_test" value="测测" />
</div>
 1    <script type="text/javascript">
window.onload=function(){
document.getElementById("div_test").addEventListener("click",test1,false);
document.getElementById("btn_test").addEventListener("click",test2,false);
}
function test1(){
alert("外层div触发")
}
function test2(){
alert("内层input触发")
}
</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);});

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

   <div class="box">
<input type="button" value="按钮1" id="btn1" onclick="showE();" />
<input type="button" value="按钮2" id="btn2" />
<input type="button" value="按钮3" id="btn3" />
</div>
   function showE(){
console.log(1111);
}
  var eventUntil={
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.removeEventListener){
element.removeEventListener(type,handler,false);
}else if(element.detachEvent){
element.attachEvent('on'+type,handler)
}else{
element['on'+type]=null;
}
}
}
eventUntil.addHandler(obtn3,"click",showE)

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

addEventListener,attachEvent的更多相关文章

  1. Javascript中addEventListener和attachEvent的区别

    在利用javascript为DOM Element添加事件处理程序时,如果要想下兼容IE6,7时,就不得不考虑addEventListener与attachEvent的异同. 1.首先说下addEve ...

  2. 注册事件处理程序onclick和addEventListener、attachEvent

    一.设置HTML标签属性为事件处理程序(注意和下面的设置javascript对象属性为事件处理程序是不同的) 用于设置文档元素事件处理程序属性也能化成对应的HTML标签的属性.如果这样做,属性值应该是 ...

  3. addEventListener()及attachEvent()区别分析

    Javascript 的addEventListener()及attachEvent()区别分析 Mozilla中: addEventListener的使用方式: target.addEventLis ...

  4. addEventListener 与attachEvent

    第一:简单的通用方法(IE && FF) window.onload = function(){ var oDiv = document.getElementById("J_ ...

  5. addEventListener和attachEvent以及element.onclick的区别

    addEventListener和attachEvent以及element.onclick的区别 attachEvent是ie添加事件处理程序,接收两个参数,其中事件类型名称要加"on&qu ...

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

    yuanwen http://www.jb51.net/article/32511.htm 写 addEventListener 和 attachEvent 区别的博文不少,不过大部分都把重点放置于前 ...

  7. addEventListener与attachEvent

    一.attachEvent和addEventListener (一)addEventListener addEventListener() 方法用于向指定元素添加事件句柄.使用 removeEvent ...

  8. addEventListener()、attachEvent()和removeEventListener()、detachEvent()的差别?

    addEventListener()和attachEvent()的差别? addEventListener:在HTML元素上绑定事件,FF.chrome.opera.safari及IE9浏览器以上的支 ...

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

    js的事件绑定方法中,ie仅仅支持attachEvent,而FF和Chrome仅仅支持addEventListener,所以就必须为这两个方法做兼容处理,原理是先推断attachEvent仅仅否为真( ...

随机推荐

  1. Eclipse如何生成jar包

    Eclipse如何生成jar包 图1 右击项目Properites,选择Android,选择Is Library,然后会编译生成jar包在bin目录下.

  2. BZOJ 1976 能量魔方 Cube(最小割)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1976 题意:给出一个n*n*n的立方体.每个小单位为字母P或者字母N.相邻两个小单位字母 ...

  3. 【转】JSP总结

    day1 JSP 定义:     1)Java Server Page, Java EE 组件,本质上是 Servlet.     2)运行在 Web Container.接收 Http Reques ...

  4. <转>“人脉投资”的10条建议

    谁都知道人脉很重要,所以有些人非常勤奋的“做人脉”,他们往往会这样做—— 积极的参与各类线下活动,逢人就换名片.加微信. 见到名人或者重要人物必合影,而且他们还会掏出手机来给你看. 逢年过节,给所有他 ...

  5. CANopen笔记2

    PDO 过程数据对象用于在节点之间传送过程数据,如I/O模块I/O状态读取和设定,模拟量采集和模拟量输出等等,协议考虑从机硬件限制最多支持4组PDO,每组包含一个RPDO和一个TPDO.The Gol ...

  6. R语言画图基础参数设置

    Graphical Parameters You can customize many features of your graphs (fonts, colors, axes, titles) th ...

  7. 屏幕序列Screen Sequences

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  8. C# 线程(三):如何操纵一个线程

    From : http://kb.cnblogs.com/page/42529/ 下面我们就动手来创建一个线程,使用Thread类创建线程时,只需提供线程入口即可.(线程入口使程序知道该让这个线程干什 ...

  9. ThreadLocal 实现线程内共享变量

    package com.cn.gbx; import java.util.Date; import java.util.Random; import java.util.Timer; import j ...

  10. ZOJ-2338 The Towers of Hanoi Revisited 输出汉诺塔的最优解移动过程

    题意:给定N(1<= N <=64)个盘子和M(4<= M <= 65)根柱子,问把N个盘子从1号柱子移动到M号柱子所需要的最少步数,并且输出移动过程. 分析:设f[i][j] ...