2009-01-08 150 views
3

我今晚在使用document.getElementById时遇到了奇怪的行为。在Firefox 3和Safari中复制。document.getElementById在函数中失败

基本上,它在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> 

回答

16

当你写这行:

window.onload = addelement(); 

...你实际上并没有分配的addElement到的window.onload。您正在执行addelement,然后将结果分配给window.onload。

更改行这样的:

window.onload = addelement; 
5

CBP已经公布了正确答案:函数 “的addElement()” 是在javascript也是一个对象, “addElement方法”。

当你说

x = addelement() ; 

分配()变量x的addElement通过返回的值(在这种情况下,返回值为null)。

当你说,

x = addelement ; 

分配功能的addElement()到变量x。

在为onload事件分配addelement时,您希望在事件发生时调用该函数。所以你把它写在没有括号的地方。

window.onload = addelement ; 

(只是澄清,因为CBP已经作出了正确的答案,但原因可能不是很明显。)