今晚使用document.getElementById时遇到奇怪的行为。在Firefox 3和Safari中重复。
基本上,它在Example1中找到id为“divid”的div。但是,在Example2中,它始终返回null。这是怎么回事?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<script type="text/javascript">
addelement = function(){
alert( document.getElementById('divid') );
}
//Example1
window.onload = function(){ alert( document.getElementById('divid') ); }
//Example2
window.onload = addelement();
</script>
<body>
<div id="divid" class="divclass">
<p>Test</p>
</div>
<body>
</html>
答案 0 :(得分:16)
当你写这一行时:
window.onload = addelement();
...您实际上并没有将 addelement 分配给window.onload。您正在执行 addelement ,然后将结果分配给window.onload。
将行更改为:
window.onload = addelement;
答案 1 :(得分:5)
cbp已经发布了正确的答案:函数“addelement()”在javascript中也是一个对象,“addelement”。
当你说,
x = addelement() ;
将addelement()返回的值(在这种情况下,返回值为null)赋值给变量x。
当你说,
x = addelement ;
将函数addelement()赋给变量x。
在为onload事件分配addelement时,您希望在事件发生时调用该函数。所以你不用括号写它。
window.onload = addelement ;
(只是澄清,因为cbp已经给出了正确的答案,但原因可能并不明显。)