document.getElementById在函数中失败

Geu*_*uis 3 javascript

今晚使用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>
Run Code Online (Sandbox Code Playgroud)

cbp*_*cbp 16

当你写这行时:

window.onload = addelement();
Run Code Online (Sandbox Code Playgroud)

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

将行更改为:

window.onload = addelement;
Run Code Online (Sandbox Code Playgroud)


Chr*_*ess 5

cbp已经发布了正确的答案:函数"addelement()"在javascript中也是一个对象"addelement".

当你说,

x = addelement() ;
Run Code Online (Sandbox Code Playgroud)

您将addelement()返回的值(在这种情况下,返回值将为null)赋值给变量x.

当你说,

x = addelement ;
Run Code Online (Sandbox Code Playgroud)

您将函数addelement()分配给变量x.

在为onload事件分配addelement时,您希望在事件发生时调用该函数.所以你不用括号写它.

window.onload = addelement ;
Run Code Online (Sandbox Code Playgroud)

(只是一个澄清,因为cbp已经给出了正确答案,但原因可能并不明显.)