事件对象的eventPhase属性,可以用来确定事件当前正位于事件流的哪个阶段。如果是在捕获阶段调用的事件处理程序,那么eventPhase等于1,如果事件处理程序处于目标对象上,则eventPhase等于2,如果是在冒泡阶段调用的事件处理程序,eventPhase等于3。这里要注意的是,尽管“处于目标”发生在冒泡阶段,但eventPhase仍然一直等于2。来看下面的例子:
var btn=document.getElementById("myBtn"); btn.onclick=function(event){ LS.log.write(event.eventPhase+" "+event.currentTarget.tagName); }; document.body.addEventListener("click",function(event){ LS.log.write(event.eventPhase+" "+event.currentTarget.tagName); },true); document.body.onclick=function(event){ LS.log.write(event.eventPhase+" "+event.currentTarget.tagName); };
当单击这个例子中的按钮时,首先执行的事件处理程序是在捕获阶段触发的添加到document.body中的那一个,结果会弹出一个警告框显示表示eventPhase的1。接着,会触发在按钮上注册的事件处理程序,此时的eventPhase值为2。最后一个被触发的事件处理程序,是在冒泡阶段执行的添加到document.body上的那一个,显示eventPhase的值为3。而当eventPhase等于2时,this、target和currentTarget始终都是相等的。只有在事件处理程序执行期间,event对象才会存在,一旦事件处理程序执行完毕,event对象就会被销毁。