事件是先捕获,后冒泡。从最外层向内逐层捕获直到目标(target),再逐层向上冒泡直到<html>标签。所有事件处理程序都会忽略捕获阶段,而在事件冒泡阶段触发事件。使用addEventListener绑定事件并且第三个参数为true,可以让事件在捕获阶段触发,这是唯一让事件在捕获阶段触发的方法。element.addEventListener("click",function(){},true)
事件中的this和event.target:
event.target:它始终指向最基本的元素,如:如果是单击事件则event.target指向鼠标点击的的元素。
this:this指的是当前事件触发的元素,从中可获取到元素的信息
一个事件有多个处理程序的情况:
事件处理程序会独立执行,互不干扰。比如有两个单击事件在同一个链接上,阻止一个事件的冒泡行为不会影响另一个事件的冒泡行为。并且浏览器不会保证事件触发的顺序。
实际编码中事件捕获使用非常少。也有一些函数不会冒泡,由捕获触发的,如:onfocus/onblur.
事件中的this和event.target:
event.target:它始终指向最基本的元素,如:如果是单击事件则event.target指向鼠标点击的的元素。
this:this指的是当前事件触发的元素,从中可获取到元素的信息
阻止事件冒泡:
element.onclick = function(event) {
event = event || window.event; // cross-browser event
if (event.stopPropagation) {
// W3C standard variant
event.stopPropagation();
} else {
// IE variant
event.cancelBubble = true;
}
//event.stopPropagation?event.stopPropagation():(event.cancelBubble = true);
}
一个事件有多个处理程序的情况:
事件处理程序会独立执行,互不干扰。比如有两个单击事件在同一个链接上,阻止一个事件的冒泡行为不会影响另一个事件的冒泡行为。并且浏览器不会保证事件触发的顺序。
实际编码中事件捕获使用非常少。也有一些函数不会冒泡,由捕获触发的,如:onfocus/onblur.