簡體   English   中英

為什么匿名函數在 Javascript 中對我不起作用?

[英]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; 
      } 
    };

這里有幾個問題,每個問題都會導致這個腳本失敗:

  • Script 標簽是文檔中的非法位置 - <body> 和 <head> 標簽之間。 它必須在其中之一中。
  • 腳本嘗試訪問名為“s_link”的變量,該變量應指向鏈接。 為了讓它引用鏈接,您需要使用類似 getElementById() 或其他 DOM 遍歷方法 [編輯 - 我看到您在發布問題后添加了該行] 來獲取元素。
  • 如果在呈現元素(鏈接)之前運行腳本(就像現在一樣),它不會影響該元素,因為它還不存在於文檔中。 要么將它包裝在一個在文檔加載時運行的函數中,要么將腳本放在文檔中的元素之后。

腳本運行時,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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM