[英]Why doesn't anonymous function work for me in Javascript?
我是 Javascript 的新手,我試圖讓這個函數工作,但是無論我做什么,我都無法讓匿名函數工作,當我切換到它工作的正常功能時。 我知道沒有匿名函數我也能活,但這真的讓我很煩。
示例:
在 HTML 文件中:
<!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;
}
};
這里有幾個問題,每個問題都會導致這個腳本失敗:
腳本運行時,id 為search_link
的鏈接不存在,因此無法使用 getElementById 或類似方法獲取。 您需要延遲代碼的執行(例如,通過將其包裝在一個執行onload
的函數中或僅將<script>
元素移動到鏈接被解析之后(通常建議在</body>
之前)。
建議:確保將您的代碼放在頁面末尾的</body>
之前。
您應該告訴您的腳本在頁面加載后執行。 為此,只需將代碼包裝如下:
window.onload = function() {
// code you had before
}
原因很簡單。 當前正在加載頁面之前執行腳本。 因此document.getElementById()請求實際上失敗了。 這與您的匿名函數無關。
正如 Dorward 先生指出的那樣,您的腳本(在 ch10_2.js 處)在 de DOM 准備就緒之前執行。 問題是,要將事件附加到元素上,該元素必須存在,但由於 javascript 代碼在加載后立即執行,因此頁面的其余部分通常仍在加載。 因此,您要將事件附加到的元素尚不存在。
我推薦這篇關於 jQuery(一個 javascript 庫)如何處理這個問題的文章: http : //www.learningjquery.com/2006/09/introducing-document-ready 。
這是一個 jsbin 非常簡單的例子: http ://jsbin.com/eziwu5/edit
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.