target在事件流的目標階段;currentTarget在事件流的捕獲,目標及冒泡階段。只有當事件流處在目標階段的時候,兩個的指向纔是同樣的, 而當處於捕獲和冒泡階段的時候,target指向被單擊的對象而currentTarget指向當前事件活動的對象(註冊該事件的對象)(通常爲父級)。this指向永遠和currentTarget指向一致(只考慮this的普通函數調用)。javascript
<div id="outer" style="background:#099">
click outer
<p id="inner" style="background:#9C0">click inner</p>
<br>
</div>
<script type="text/javascript"> function G(id){ return document.getElementById(id); } function addEvent(obj, ev, handler){ if(window.attachEvent){ obj.attachEvent("on" + ev, handler); }else if(window.addEventListener){ obj.addEventListener(ev, handler, false); } } function test(e){ alert("e.target.tagName : " + e.target.tagName + "\n e.currentTarget.tagName : " + e.currentTarget.tagName); } var outer = G("outer"); var inner = G("inner"); //addEvent(inner, "click", test); addEvent(outer, "click", test); </script>
解析:java
當點擊inner對象的時候,先觸發inner綁定的事件,再觸發outer綁定的事件,(由於outer是在事件冒泡階段綁定的,若是outer是在捕獲階段綁定的,就會先觸發out的事件程序,即使inner事件也綁定在捕獲階段。由於捕獲流從根部元素開始)。
事件流:捕獲(自頂而下)——目標階段——冒泡(自下而頂)markdown
在事件處理程序內部,對象this始終等於currentTarget的值,而target則只包含事件的實際目標。若是直接將事件處理程序指定給了目標元素,則this、currentTarget和target包含相同的值。函數