我觉得这很有意思。考虑以下代码,window.onload和body onload =“”都调用相同的函数。但是,结果不同。在我看来,window.onload存在集合问题。这是代码:
<html>
<script type="text/javascript">
window.onload = getSpanElements();
function getSpanElements(){
var collectionBoolean = document.getElementsByTagName("span")?true:false;
alert(
"collection exists? " + collectionBoolean + "; number of collection members: " + document.getElementsByTagName("span").length
);
}
</script>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Untitled Document</title>
</head>
<body onload="getSpanElements()">
<span> test </span>
</body>
如您所见,两者都报告集合存在,但window.onload报告它没有成员。有什么想法吗?
答案 0 :(得分:11)
您正在设置错误的功能:
window.onload = getSpanElements();
应该是
window.onload = getSpanElements;
您现在将onload处理程序设置为getSpanElements()的返回值。
答案 1 :(得分:10)
window.onload = getSpanElements();
应该是
window.onload = getSpanElements;
您有调用 getSpanElements
函数的代码,并将其返回值指定为onload事件处理程序。
答案 2 :(得分:3)
你错误地这样做了:
window.onload = getSpanElements();
将window.onload
设置为函数getSpanElements
(未定义)的调用结果。
你应该这样做:
window.onload = getSpanElements;
答案 3 :(得分:2)
您可能希望将window.onload分配移动到getSpanElements声明下面:
<html>
<script type="text/javascript">
function getSpanElements(){
var collectionBoolean = document.getElementsByTagName("span")?true:false;
alert(
"collection exists? " + collectionBoolean + "; number of collection members: " + document.getElementsByTagName("span").length
);
}
window.onload = getSpanElements;
</script>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Untitled Document</title>
</head>
<body onload="getSpanElements()">
<span> test </span>
</body>
在您分配window.onload事件处理程序的代码中,尚未定义getSpanElements()。此外,该行应
window.onload=getSpanElements;
不
window.onload=getSpanElements();
没有括号的函数名称是对函数的引用。使用括号,它执行函数,并将返回值分配给window.onload。
答案 4 :(得分:1)
您必须将函数getSpanElements
的引用分配给window.onload
- 目前,该函数不会被执行onload
,而是在解析后立即执行。
您实际分配的是未定义的返回值。
简而言之:放弃()
。
答案 5 :(得分:0)
我认为window
对象是在解析任何实际元素之前创建的。