事件
事件就是文档或浏览器窗口中发生的一些特定的交互瞬间,其主要分为三步骤:
获取事件源(DOM元素)
绑定事件
设置事件驱动程序(即触发事件的处理)
1. 事件传播
一个事件发生后,会在子元素和父元素之间传播(propagation)。这种传播分成三个阶段。
第一阶段:从
window对象传导到目标节点(上层传到底层),称为“捕获阶段”。第二阶段:在目标节点上触发,称为“目标阶段”。
第三阶段:从目标节点传导回
window对象(从底层传回上层),称为“冒泡阶段”。

捕获阶段:事件从
div向p传播时,触发div的捕获click事件;目标阶段:事件从
div到达p时,触发p的click冒泡事件;冒泡阶段:事件从
p传回div时,先触发p的捕获click事件,再次触发div的冒泡click事件。
不是所有的事件都能冒泡,以下事件不冒泡:blur、focus、load、unload、onmouseenter、onmouseleave。意思是,事件不会往父元素那里传递。
停止冒泡
2. 事件模型
DOM0模型:DOM对象.事件 = 函数,一个元素的一个事件只能绑定一个响应函数,事件发生后不会传播,没有事件流概念<input type="button" onclick="func1()" />
IE事件模型:总共两个阶段事件处理阶段和事件冒泡阶段。绑定事件:attachEvent(eventType, handler);解除事件:detachEvent(eventType, handler)。
DOM2模型*:总共三个阶段事件捕获阶段、事件处理阶段和事件冒泡阶段。
绑定事件:ele.addEventListener(eventType, handler, useCapture);
解除事件:ele.removeEventListener(eventType, handler, useCapture);
3. 事件代理
由于事件会在冒泡阶段向上传播到父节点,因此可以把子节点的监听函数定义在父节点上,由父节点的监听函数统一处理多个子元素的事件,通过判断事件发生元素DOM的类型,来做出不同的响应。这种方法叫做事件代理(delegation),也称事件委托。比较合适于动态元素的绑定。
最后更新于
这有帮助吗?