今天逛博客园偶然间看到一篇关于event对象的文章,个人感觉有个地方写的不对,因此想在此表达下自己的观点。首先大致描述下关于event对象。
event
事件的处理分别经过捕获阶段、目标阶段、事件冒泡阶段这3个阶段。
捕获阶段
在捕获阶段,事件将会从window对象开始向下遍历DOM树来传播(如果注册了事件侦听器则会在捕获阶段执行相应的处理)
目标阶段
在这一阶段中,被事件目标注册的事件侦听器将会被执行。
事件冒泡阶段
在这一阶段,事件的传播方式是从事件目标开始向上遍历DOM树,直至window对象结束。不过,也有一些事件不会经过冒泡阶段(focus)。
在此有两个地方想跟大家分享下:
事件的执行顺序是上文中三个阶段逐一执行(而不是其他文章说的那样如果e.target 跟你绑定的事件目标相同则从目标阶段开始);
另外一点就是大家可能会忽略的地方在一次事件触发的过程中,只有一个触发事件的元素(即e.target是不变的),然而可以有多个执行处理该事件的元素(即有多个e.currentTarget);
第二点其实也是事件代理整个过程的缩略:
所谓的事件代理其实就是通过事件冒泡来实现,整个过程大致如下:
首先以触发事件的元素为起点,然后不断的循环向上到父节点传播只要这些节点与指点的元素相同那么就执行该事件,一直循环到你委托代理指定的元素(e.currentTarget).
另外关于事件对象还有几个知识点顺便分享给大家:
eventPhase : 用于标识处于事件传播的哪一个阶段;
bubbles:如果处于事件冒泡阶段返回true,否则为false;
cancelable: 如果可以执行preventDefault()方法返回true,否则为false
(以上仅代表个人的想法或者观点,如果有任何值得商榷的地方,欢迎指正)
时间: 2024-10-13 12:22:38