Mozilla中:html
addEventListener的使用方式:函数
target.addEventListener(type, listener, useCapture);post
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);htm
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);});blog
(addEVentListener是w3c标准的event API可是ie不支持标准的capture bubble事件模型,因此只支持2参数的attachEvent不知是名字上的差异,addEventListener第三参数,若是是false那就是bubble过程的event handler若是是true那就是capture过程的event handler,而ie只支持bubble因此不必添加第三参数,而且click是事件,而onclick是event handler不是有没有on的区别)接口
addEventListener 用于注册事件处理程序,IE 中为 attachEvent,咱们为何讲 addEventListener 而不讲 attachEvent 呢?一来 attachEvent 比较简单,二来 addEventListener 才是 DOM 中的标准内容。seo
简介事件
addEventListener 为文档节点、document、window 或 XMLHttpRequest 注册事件处理程序,在之前咱们通常是 <input type="button" onclick="...",或 document.getElementById("testButton").onclick = FuncName, 而在 DOM 中,咱们用 addEventListener(IE 中用 attachEvent)。ip
语法
target.addEventListener(type, listener, useCapture);
示例
function Go()
{
//...
}
document.getElementById("testButton").addEventListener("click", Go, false);
或者 listener 直接就是函数
document.getElementById("testButton").addEventListener("click", function () { ... }, false);
addEventListener-事件流
说到 addEventListener 不得不说到事件流,先说事件流对后面的解释比较方便。
当一个事件发生时,分为三个阶段:
捕获阶段 从根节点开始顺序而下,检测每一个节点是否注册了事件处理程序。若是注册了事件处理程序,而且 useCapture 为 true,则调用该事件处理程序。(IE 中无此阶段。)
目标阶段 触发在目标对象自己注册的事件处理程序,也称正常事件派发阶段。
冒泡阶段 从目标节点到根节点,检测每一个节点是否注册了事件处理程序,若是注册了事件处理程序,而且 useCapture 为 false,则调用该事件处理程序。
举例
<div id="div1">
<div id="div2">
<div id="div3">
<div id="div4">
</div>
</div>
</div>
</div>
若是在 d3 上点击鼠标,事件流是这样的:
捕获阶段 在 div1 处检测是否有 useCapture 为 true 的事件处理程序,如有,则执行该程序,而后再一样地处理 div2。
目标阶段 在 div3 处,发现 div3 就是鼠标点击的节点,因此这里为目标阶段,如有事件处理程序,则执行该程序,这里不论 useCapture 为 true 仍是 false。
冒泡阶段 在 div2 处检测是否有 useCapture 为 false 的事件处理程序,如有,则执行该程序,而后再一样地处理 div1。
注意,上述捕获阶段和冒泡阶段中,实际上 div1 之上还应该有结点,好比有 body,但这里不讨论。
引用:
http://www.cnblogs.com/xgcblog/archive/2011/06/10/2077648.html