2012-09-10 149 views
0

學習JavaScript時,我得到這個代碼:檢查事件處理函數參數

myLink.onmouseover = showLinkAttr; 
function showLinkContent(evt) { 
    if (evt) { 
     var url = evt.target; 
    } 
    else { 
     evt = window.event; 
     var url = evt.srcElement; 
    } 
.............. 

我不知道爲什麼我們需要在創建之前檢查事件處理函數參數「EVT」。在這裏,我的思路是這樣的代碼是多餘的,因爲「EVT」不存在(此代碼是在腳本文件的開頭),顯示我們應該不檢查來創建它,就像這樣:

myLink.onmouseover = showLinkAttr; 
    function showLinkContent(evt) { 
     evt = window.event; 
     var url = evt.srcElement; 

然而,因爲我是JavaScript新手,下面的代碼是由專家編寫的。那麼,你能告訴我爲什麼她使用它而不是我在下面寫的那個? 謝謝。

+0

要接受有關其他一些問題的答案,您需要點擊答案評分下方的勾號大綱。 – starbeamrainbowlabs

回答

2

你有一半... evt當客戶端運行的是被稱爲IE瀏覽器的那段悲慘的藉口是不確定的。

IE不會將事件對象傳遞給處理程序,但只有1個全局事件對象。這就是爲什麼您的事件處理程序檢查事件對象是否作爲參數傳遞的原因,如果不是,它會獲取全局事件對象。這可以寫短了很多,但:

evt = evt || window.event;//evt is equal to itself, if it's not undefined, else it's a reference to the global object 

同上目標(你稱之爲var url,這是混亂的,也許是錯誤的):

var target = evt.target || evt.srcElement; 

target(或srcElement)返回一個引用到一個DOM元素(事件被觸發的元素),而不是一個url,就像你的varname會讓你相信。
雙管道||被稱爲默認操作員。