2011-02-13 45 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

相关问题