事件对象作为两个属性将帮助您完成此任务:
event.currentTarget 标识事件的当前目标,因为事件遍历 DOM。它始终指代事件处理程序已附加到的元素,而不是 event.target 标识发生事件的元素。外部 div 的事件通知将传递两次,首先在捕获阶段,然后在冒泡阶段,中间如果您在内部 div 中实例化一个处理程序,它将被通知。您可以在需要时停止传播。
http://fiddle.jshell.net/hmariod/dvV4E/
document.getElementById("outer").addEventListener('click',etvFn,true);
document.getElementById("outer").addEventListener('click',etvFn,false);
document.getElementById("inner").addEventListener('click',etvFn,true);
document.getElementById("inner").addEventListener('click',etvFn,false);
document.getElementById("innerP").addEventListener('click',etvFn);
function etvFn(evt){
var phase;
if(evt.eventPhase === 1){
phase = "Capture";
}else if(evt.eventPhase === 2){
phase = "Target";
}else{
phase = "Bubbling";
}
alert("Target:" + evt.target.id + "\nCurrent Target:" + evt.currentTarget.id + "\nPhase:" + phase);
}