2011-02-13 73 views
0

我是新來的java腳本,我試圖讓這個功能工作,但是我做了什麼我不能讓匿名函數工作,當我切換到正常的功能,它的工作原理。我知道我可以沒有匿名功能的生活,但它真的很煩人。 例如: 在HTML文件中:爲什麼在javasscript中匿名函數不適用於我?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Untitled Document</title> 
</head> 
<script type="text/javascript" src="ch10_2.js"> </script> 
<body> 
<a href="http://www.google.com" id="search_link">Go Searching</a> 
</body> 
</html> 
JavaScript文件中

var s_link = document.getElementById("search_link"); 

s_link.onclick = function() { 
     var is_sure = window.confirm("Are you sure you want to leave?"); 
     if (!is_sure) { 
     window.alert("OK. You can stay here."); 
     return false; 
     } 
    }; 

感謝

回答

3

這裏有幾個問題,每個對自己將導致該腳本失敗:

  • 腳本標記是文檔中的非法位置 - <主體>和<主題>標記。它必須在其中之一。
  • 腳本嘗試訪問名爲's_link'的變量,該變量應該指向鏈接。爲了引用鏈接,你需要使用getElementById()或其他DOM遍歷方法來獲取元素[編輯 - 我看到你在發佈問題後添加了該行]。
  • 如果腳本在呈現元素(鏈接)之前運行(因爲它現在),它不會影響元素,因爲它在文檔中尚不存在。將它包裝在一個運行於文檔加載的函數中,或者將腳本放置在文檔中的元素之後。
+0

最後一點是它,謝謝 – Arjen 2011-02-13 14:21:18

0

與ID search_link鏈接在腳本運行的時候不存在,所以無法使用getElementById或類似方法獲取它。你需要通過包裝它在執行onload函數或只是<script>元素移動到該鏈接被解析後(之前經常被推薦</body>)延遲代碼執行(例如。

+0

抱歉,其實我定義它,但我忘了把它寫在這裏 – Arjen 2011-02-13 14:16:44

0

您應該告訴您的腳本在頁面加載後執行。要做到這一點,只是包裝代碼如下所示:

window.onload = function() { 
    // code you had before 
} 

原因很簡單。該腳本目前正在加載頁面之前執行。因此,document.getElementById()請求實際上是失敗的。它與你的匿名功能無關。

0

就像Dorward先生指出的那樣,您的腳本(在ch10_2.js中)在de DOM準備好之前執行。 事情是,將一個事件附加到一個元素上,所說的元素必須存在,但是一旦它被加載,JavaScript代碼就會被執行,而頁面的其餘部分通常仍然在加載。因此,您想要附加事件的元素尚不存在。

我推薦這篇關於jQuery(一個javascript庫)如何處理這個問題的文章:http://www.learningjquery.com/2006/09/introducing-document-ready

這裏是一個jsbin很簡單的例子:http://jsbin.com/eziwu5/edit

相關問題