2013-03-04 71 views
2

正如標題所示,如果我保證在Javscript事件處理程序中獲得事件對象,我很好奇。我問的主要原因是我看過onClick事件處理程序,看起來像這樣。我是否確保在JavaScript事件處理程序中獲取帶有目標屬性的事件對象?

function(e) { 
    if(e && e.target) { 
     //Code in here 
    } 
} 

對我來說這似乎是錯誤的,但我知道JavaScript可以有不同的瀏覽器差異。是否有一段時間適合檢查事件對象?或事件目標?看起來你必須有一個目標來開火。

回答

3

否。老版本的Windows不會將事件參數傳遞給事件處理程序。它們在全局變量window.event中,目標是.srcElement。除了那個例外,你應該總是得到一個事件結構。

用於舊版本IE的解決辦法是這樣的:

function(e) { 
    if (!e) { 
     e = window.event; 
     e.target = e.srcElement; 
    } 
    // code that uses e here 
} 

但是,通常情況下,這是在通過使用安裝事件處理功能更高層面上加以解決。例如:

// add event cross browser 
function addEvent(elem, event, fn) { 
    if (elem.addEventListener) { 
     elem.addEventListener(event, fn, false); 
    } else { 
     elem.attachEvent("on" + event, function() { 
      // set the this pointer same as addEventListener when fn is called 
      window.event.target = window.event.srcElement; 
      return(fn.call(elem, window.event)); 
     }); 
    } 
} 
+0

感謝您的詳細回答:3 – Jazzepi 2013-03-04 18:44:23

1

根據他們期望實現的瀏覽器兼容性,這可能是一個可接受的解決方案。 但是,對於舊版本的IE,event對象是全局window對象的一部分。爲了在這種情況下獲得目標,您需要window.event.srcElement,因爲沒有target

有關IE的event對象的更多信息。

+0

感謝您的鏈接! – Jazzepi 2013-03-04 18:12:54

+0

沒問題。我希望它有助於=) – Chase 2013-03-04 18:13:50

相關問題