为什么匿名函数在javascript中对我不起作用?

时间:2011-02-13 14:10:32

标签: javascript javascript-events anonymous-function

我是java-script的新手,我正在尝试让这个功能起作用,但是我做什么我不能让匿名函数工作,当我切换到正常功能时它工作。我知道我可以没有匿名功能,但它真的很烦我。 例: 在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; 
      } 
    };

感谢

5 个答案:

答案 0 :(得分:3)

这里有几个问题,每个问题都会导致此脚本失败:

  • 脚本标记是文档中的非法位置 - 在&lt; body&gt;之间和&lt; head&gt;标签。它必须在其中一个。
  • 脚本尝试访问名为“s_link”的变量,该变量应指向该链接。要引用该链接,您需要使用getElementById()或其他DOM遍历方法来获取元素[编辑 - 我发现您在发布问题后添加了该行]。
  • 如果在渲染元素(链接)之前运行脚本(就像现在一样),它将不会影响元素,因为它尚未存在于文档中。将其包装在文档加载的函数中,或将脚本放在文档中的元素之后。

答案 1 :(得分:0)

脚本运行时,标识search_link的链接不存在,因此无法使用getElementById或类似内容获取该链接。您需要延迟代码的执行(例如,将其包装在执行onload的函数中,或者仅在解析链接之后将<script>元素移动到{</body>之前推荐)。

答案 2 :(得分:0)

It works for me.

建议:请务必将代码放在</body>之前的页面末尾。

答案 3 :(得分:0)

您应该告诉您的脚本在页面加载后执行。为此,只需将代码包装如下:

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

原因很简单。该脚本当前正在加载页面之前执行。因此, document.getElementById()请求实际上是失败的。它与你的匿名功能无关。

答案 4 :(得分:0)

就像Dorward先生指出的那样,你的脚本(在ch10_2.js)是在de DOM准备好之前执行的。 问题是,要将一个事件附加到一个元素上,所述元素必须存在,但是当javascript代码一加载就执行,页面的其余部分通常仍在加载。因此,您要附加事件的元素尚不存在。

我推荐这篇关于jQuery(javascript库)如何处理这篇文章的文章:http://www.learningjquery.com/2006/09/introducing-document-ready

这是一个非常简单的例子:http://jsbin.com/eziwu5/edit