JS事件捕获和事件冒泡

事件捕获:DOM接收的事件最先应该是window接收,然后再一节一节往下,最后才是具体的元素接受到事件。
事件冒泡:IE认为DOM事件应该由具体元素最先接受事件,然后再一节一节往上,最后再由window接收事件。
W3C将两种方案做了统一,即:把DOM事件分为两个阶段,事件捕获阶段和事件冒泡阶段,例如:当页面某一个元素被点击,首先是事件捕获阶段,window最先接收事件,然后一节一节往下捕获,最后由具体元素接收,然后再由具体元素一节一节往上,最后window会再次接收事件。
这样当页面上一个对象触发某个事件,我们会有两次机会对其进行操作!虽然DOM2级事件规范中要求事件捕获过程中不会涉及事件目标,但是各高版本浏览器中都会在事件捕获过程中触发对象事件。


阻止冒泡/捕获:
通过e.stopPropagation()方式阻止事件的冒泡.阻止冒泡或捕获的继续执行,在需要停止的函数使用.在该函数使用时,该函数还是会执行,但是函数外之后的代码不会执行.
IE8只有事件没有捕获,


什么是事件代理?
利用事件冒泡的原理,在父元素接受事件,然后再事件冒泡。JS对象中有一个target属性,通过target属性可以知道具体时间那个元素触发了事件。
只对ul进行了事件监听,但是当我们分别点击不同元素时,即使该元素没有添加事件监听,同样会在控制台上显示我们点击了这个元素,这就是事件代理(事件委托)。


addEventListener() 方法用于向指定元素添加事件句柄。element.addEventListener(event, function, useCapture),Internet Explorer 8 及更早IE版本不支持 addEventListener() 方法,,Opera 7.0 及 Opera 更早版本也不支持。 但是,对于这些不支持该函数的浏览器,你可以使用 attachEvent() 方法来添加事件句柄。
其中的event,必须。字符串,指定事件名。 不要使用 “on” 前缀。 例如,使用 “click” ,而不是使用 “onclick”。
function 必须。指定要事件触发时执行的函数
useCapture 可选。布尔值,指定事件是否在捕获或冒泡阶段执行。


首是进入捕获阶段,直到达到目标元素,再进入冒泡阶段。
绑定在被点击元素的事件是按照代码的顺序发生的,其他非绑定的元素则是通过冒泡或者捕获的触发。按照W3C的标准,先发生捕获事件,后发生冒泡事件。所以事件的整体顺序是:非目标元素捕获 -> 目标元素代码顺序 -> 非目标元素冒泡。

你可能感兴趣的:(javascript,前端知识点)