2010-12-21 86 views
18
<html> 
<head> 
    <title>Test javascript</title> 

    <script type="text/javascript"> 
     var e = document.getElementById("db_info"); 
     e.innerHTML='Found you'; 
    </script> 
</head> 
<body> 
    <div id="content"> 
     <div id="tables"> 

     </div>   
     <div id="db_info"> 
     </div> 
    </div> 
</body> 
</html> 

如果我使用alert(e);它變成null ....顯然我沒有在屏幕上找到任何「找到你」。我究竟做錯了什麼?Javascript找不到id的元素?

+0

深思:什麼時候的JavaScript代碼塊運行?什麼時候創建和/或保證存在ID爲「db_info」的DIV? – 2010-12-21 10:56:46

回答

40

問題是,您正試圖訪問存在之前的元素。您需要等待頁面完全加載。一種可能的方法是使用onload處理程序:

window.onload = function() { 
    var e = document.getElementById("db_info"); 
    e.innerHTML='Found you'; 
}; 

最常見的JavaScript庫提供一個DOM就緒事件,雖然。這更好,因爲window.onload也等待所有圖像。在大多數情況下你不需要這個。

另一種方法是在關閉之前放置腳本標記</body> -tag,因爲它的前面的所有內容都是在執行時加載的。

+2

用於window.onload和匿名函數^^ – 2010-12-21 10:56:12

0

腳本在構建主體的DOM之前執行。把它全部放到一個函數中,並從body元素的onload中調用它。

1

在onload事件中運行代碼,或者在關閉body標記之前運行代碼。 你試圖找到一個元素,但你不這樣做。

1

瀏覽器如何知道何時在腳本標記中運行代碼?因此,爲了使代碼運行的窗口完全載入後,

window.onload = doStuff; 

function doStuff() { 
    var e = document.getElementById("db_info"); 
    e.innerHTML='Found you'; 
} 

另一種方法是,讓您的<script...</script>之前收盤</body>標籤。

1

在元素存在之前調用腳本。

你應該嘗試下列之一:

  1. 包裹的代碼放到一個函數,並使用身體onload事件調用它。
  2. 把腳本文件在
  3. 使用defer屬性的一端插入腳本標記聲明