2011-03-27 120 views
0

我是JavaScript的新手,試圖學習事件處理程序。看着這個小提琴http://jsfiddle.net/mjmitche/uV4kv/誰能告訴我爲什麼當鏈接被點擊時彈出不出現?JavaScript事件處理程序 - 爲什麼沒有提醒?

我也複製下面

<a href="#" title="click me" id="clickLink">click me</a> 


function addEventHandler(oNode, sEvt, fFunc, bCaptures){ 
    if (typeof(window.event) != "undefined") 
     oNode.attachEvent("on"+sEvt, fFunc); 
    else 
     oNode.addEventListener(sEvt,fFunc,bCaptures); 
} 

function onLinkClicked(e) { 
    alert("you clicked the link"); 
} 
function setUpClickHandler(){ 
    addEventHanlder(document.getElementById('clickLink'), "click", onLinkClicked, false); 
} 

addEventHandler(window,"load",setUpClickHandler,false); 
+0

我得到的錯誤:* Uncaught ReferenceError:setUpClickHandler沒有定義* – 2011-03-27 10:25:34

+0

'addEventHanlder'中有一個輸入錯誤 – 2011-03-27 10:26:38

+0

@Pekka:有不止一個。 – 2011-03-27 10:31:16

回答

3

主要有三個問題:

  • 你有一些錯別字,例如「Hanlder」而不是「Handler」和「Sevt」而不是「sEvt」。

  • 該代碼已在頁面加載後運行,因此您添加到window的事件處理程序將永遠不會被調用。將jsFiddle從onLoad更改爲no wrap (head)

  • 您「IE檢測」不起作用。我在Chrome中出現此錯誤:

    Uncaught TypeError: Object http://fiddle.jshell.net/_display/# has no method 'attachEvent' .

    更好的做法是測試函數window.attachEvent是否存在。我也認爲window.event只有在事件發生時纔可用。

如果這被更正,your code will run (DEMO)


附加說明:

測試該方法的支持(即attachEventaddEventListener)在您的函數的每個調用是不必要的。它在頁面的生命期間不會改變。最好是在開始時只測試一次。例如:

var addEventHandler = (function() { 
    if(window.attachEvent) { 
     return function(oNode, sEvt, fFunc) { 
      oNode.attachEvent("on"+sEvt, fFunc); 
     }; 
    } 
    else { 
     return function(oNode, sEvt, fFunc, bCaptures) { 
      oNode.addEventListener(sEvt,fFunc,bCaptures); 
     }; 
    } 
}()); 

這將一個函數的支持函數賦值給addEventHandler

1

你的addEventHandler代碼需要adustment:

function addEventHandler(oNode, sEvt, fFunc, bCaptures) { 
    oNode.attachEvent ? oNode.attachEvent ("on" + sEvt, fFunc) : 
         oNode.addEventListener (sEvt, fFunc, bCaptures); 
} 

它是在事件處理程序本身,你需要檢查window.event

+0

誠然,儘管他的版本大部分時間都會工作。但這不是真正的問題。 – 2011-03-27 10:29:09

+0

謝謝,但我沒有看到你的答案中的代碼和OP中的代碼之間有任何真正的區別。我沒有檢查我的addEventHandler函數中的窗口事件嗎? – Leahcim 2011-03-27 11:22:49

2

幾個問題:

  • 你有一個反覆出現的錯字,「Hanlder」而不是「Handler」。至少有兩個,一個是你的setUpClickHanlder(原文如此)功能,另一個是(addEventHanlder)。
  • 此外,你有「Sevt」你的意思是「sEvt」。 (JavaScript區分大小寫。)

Let tools help you。使用一個瀏覽器給你一個顯示錯誤的控制檯。通過代碼使用調試器的單步調試,在與覈查人員運行時看變量值等

+0

非常感謝 – Leahcim 2011-03-27 10:45:55

+0

感謝您的調試器建議,但我覺得它們很混亂。如果你碰巧知道一個好的教程,逐步解釋調試過程(以及如何解釋數據),那麼請推薦。乾杯。 – Leahcim 2011-03-27 10:55:29

+0

@邁克爾:我不知道,但一個快速搜索表明,他們在那裏。例如,Chrome團隊有視頻等:http://code.google.com/chrome/devtools/當然,Visual Studio.Net有一個龐大的社區,我相信人們已經寫了如何使用它。 Firebug(Firefox的調試器)有一個wiki(我不知道它有多好):http://getfirebug.com/wiki/index.php/Main_Page – 2011-03-27 11:55:23

相關問題