2009-10-27 101 views
1

我覺得這很有趣。考慮下面的代碼,window.onload和body onload =「」調用相同的函數。但結果不同。在我看來,window.onload對集合有一個問題。下面的代碼:window.onload!= <body 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報告說,它沒有任何成員。有任何想法嗎?

回答

11

你設置功能失常:

window.onload = getSpanElements(); 

應該

window.onload = getSpanElements; 

你onload處理設置爲getSpanElements()目前的返回值。

+0

絕對正確!謝謝:) – 2009-10-27 22:09:12

0

我認爲window對象是在解析任何實際元素之前創建的。

+0

我會假設如此,但它很清楚集合存在,這就是讓我困惑的地方。 – 2009-10-27 22:03:48

10
window.onload = getSpanElements(); 

應該

window.onload = getSpanElements; 

的代碼,你有電話getSpanElements功能及其返回值分配的onload事件處理程序。

+0

絕對正確!謝謝:) – 2009-10-27 22:09:55

2

您可能想要移動以下getSpanElements聲明你的window.onload分配:你在哪裏分配window.onload事件處理程序

<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> 

在你的代碼點,getSpanElements()尚未已被定義。另外,行應該是

window.onload=getSpanElements; 

window.onload=getSpanElements(); 

函數名沒有括號是對函數的引用。使用括號,它執行該函數並將返回值分配給window.onload。

+2

由於getSpanElements是用函數語句而不是函數表達式定義的,因此它可能會被提升 - 因此它不需要以代碼順序出現在賦值之前。 – Quentin 2009-10-27 22:09:44

+0

是的,我打電話而不是參考。謝謝! – 2009-10-27 22:10:31

3

你錯誤地這樣做:

window.onload = getSpanElements(); 

這臺window.onload到調用的結果給函數getSpanElements(不確定)。

你應該這樣做,而不是:

window.onload = getSpanElements; 
+1

實際上,函數返回'undefined',而不是'null' – Christoph 2009-10-27 22:08:34

+0

現在編輯,謝謝Christoph :) – Seb 2009-10-27 22:09:50

1

你必須getSpanElementswindow.onload爲參考分配給功能 - 目前,該功能沒有得到執行onload,但分析後即可。

你實際分配的是未定義的返回值。

總之:降()

相關問題