Dom事件的srcTarget,strElement探幽

//作者: laruence<xinchen.hui at alibab-inc.com>
//http://blog.csdn.net/laruence/
//轉載請註明出處 
  
     我們知道在Javascript中,可以使用事件處理函數來監聽事件,在事件處理函數中,我們可以通過當前的事件對象(IE: window.event ; firefox parameter event)來獲取到事件發生的對象。
    比如,在IE中
     
 function eventHandler = function(e){
     var ev = e || window.event ; //window.event for IE, para e for ff
     var el = evt.srcTarget || evt.srcElement; // compatible with IE
     //then el is the target which cause the event
}
              
    那麼,JS內部是如何通過event獲取到srcTarget呢? 一直以來,我以爲srcTarget會保留一個到事件發生對象的引用,但今天遇到的一個問題,讓我改變了看法:
    一個Div,上面有個blur時間,當失去焦點的時候就會display=none, Div中包含幾個<a>標籤,在這些標籤上監聽了click事件。

    問題出現了,因爲當你click一個A的時候,blur時間被觸發了,那麼這個DIV就display none了,緊接着click事件被觸發,問題就是,這個時候,在click函數中,取不到正確的srcTarget了。
  
     經過一番折騰,最後使用了個比較hacker的方法來解決,就是在blur事件函數中,這樣:
     
   setTimeout(function(){div.style.display='none';}, 100);
    
     回頭來想,我猜測,Javascript中的srcElement的獲取機制如下:
     事件發生時,event對象記錄事件的鼠標座標,但並不記錄發生事件對象的引用,只有當你去獲取srcTarget的時候,JS解釋器,會根據event的鼠標座標去獲取該座標的元素。


     當然,這只是個簡單猜想,還沒有去仔細驗證,唉,不開源的東西搞起來就是麻煩,還要猜啊猜的。

     如果誰知道具體機理,歡迎來信指教。   
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章