事件冒泡:
1、IE 的事件流叫做事件冒泡(eventbubbling),即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点(文档)。
2、所有现代浏览器都支持事件冒泡,但在具体实现上还是有一些差别。IE9、Firefox、Chrome和Safari 则将事件一直冒泡到 window 对象
事件捕获:
1、事件捕获的思想是不太具体的节点应该更早接收到事件,而最具体的节点应该最后接收到事件。事件捕获的用意在于在事件到达预定目标之前捕获它。
2、由于老版本的浏览器不支持,因此很少有人使用事件捕获。我们也建议读者放心地使用事件冒泡,在有特殊需要时再使用事件捕获
“DOM2级事件”定义了两个方法,用于处理指定和删除事件处理程序的操作:addEventListener()
和 removeEventListener()
。所有 DOM 节点中都包含这两个方法,并且它们都接受 3 个参数:要处理的事件名、作为事件处理程序的函数和一个布尔值。最后这个布尔值参数如果是true,表示在捕获阶段调用事件处理程序;如果是 false,表示在冒泡阶段调用事件处理程序。
在事件处理程序内部,对象 this 始终等于 currentTarget 的值,而 target 则只包含事件的实
际目标。如果直接将事件处理程序指定给了目标元素,则 this、currentTarget 和 target 包含相同
的值
处理多个事件时,可以使用type属性
var btn = document.getElementById("myBtn");
var handler = function(event){
switch(event.type){
case "click":
alert("Clicked");
break;
case "mouseover":
event.target.style.backgroundColor = "red";
break;
case "mouseout":
event.target.style.backgroundColor = "";
break;
}
};
btn.onclick = handler;
btn.onmouseover = handler;
btn.onmouseout = handler;
要阻止特定事件的默认行为,可以使用 preventDefault()方法。
例如,链接的默认行为就是在被单击时会导航到其 href 特性指定的URL。如果你想阻止链接导航这一默认行为,那么通过链接的onclick事件处理程序可以取消它,如下面的例子所示。
var link = document.getElementById("myLink");
link.onclick = function(event){
event.preventDefault();
};
只有 cancelable 属性设置为 true 的事件,才可以使用preventDefault()来取消其默认行为。
只有在事件处理程序执行期间,event 对象才会存在;一旦事件处理程序执行完成,event 对象就会被销毁
只有在事件处理程序执行期间,event 对象才会存在;一旦事件处理程序执行完
成,event 对象就会被销毁