“getElementsByTagName(...)[0]”未定义?
2012-05-29
39281
我有以下代码,它基本上在一堆图像之间切换。
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
var num = 1;
img = document.getElementsByTagName("img")[0];
hbutton = document.getElementsByTagName("h1")[0];
hbutton.onclick = function() {
num += 1;
img.src = num + ".jpg";
}
</script>
</head>
<body>
<h1>Press Here!</h1>
<img src = "1.jpg"></img>
</body>
</html>
出于某种原因,当我运行它时,什么也没有发生,因为我的 Firebug 控制台显示了以下错误。
hbutton is undefined
---
hbutton.onclick = function() {
但是,当我在页面加载后仅运行 JS 时,它运行得非常好!!!为什么会这样?
3个回答
您的代码在定义 h1 标签之前执行。您必须在 onload 处理程序中运行它,或将其放在 /body 之前
Julian
2012-05-29
JavaScript 是从上到下解释的。因此,在
<script>
执行的位置,尚未发现任何
h1
标签。
尝试将
<script>
标签放在页面底部。否则,如果您需要在页面开头使用脚本,onLoad-Handler 可能会有所帮助:
<script type="text/javascript">
function onLoadHandler() {
// your original javascript code here...
}
</script>
<body onload="onloadHandler()">
<!-- HTML Code here-->
Lukx
2012-05-29
当您将其放在标题中时,您的 h1 尚未加载。hbutton 变为未定义,而不是对象。然后当您尝试设置 .onclick 时,它会中断,因为您无法设置未定义的属性。当您将代码放在正文中时,您的 h1 已经加载,因此代码可以按预期工作。
您可以通过将代码留在顶部来解决此问题,但仅在 onload 事件后调用它。
Joel
2012-05-29