2010-10-10 58 views
0

初學者在這裏... 我在想什麼?javascript:不能在一個函數中使用全局變量,導航dom

我定義一個全局變量,它是一個html元素的引用:

  var x=document.getElementById("xxx1"); 

然後,功能內部的嘗試引用該變量導航DOM:

 x.innerHTML="dsfgfdgdf"; 

.. 。不工作;如果我在函數內部定義變量,但是我不明白它是一個範圍問題......在函數內部使用全局變量工作正常如果我不在dom上下文中使用它們(object.property)

謝謝

回答

2

這不是範圍問題。

最有可能的原因是該元素在創建變量時尚不存在。您必須將用於創建變量的腳本元素放在要訪問的元素之後,因爲代碼將在頁面加載時運行。

另一種方法是在全球範圍內聲明的變量,從運行在頁面加載後onload事件設置:

<script> 

var x; 

function init() { 
    x = document.getElementById('xxx1'); 
} 

</script> 

<body onload="init();"> 
2

是否在加載DOM之前執行getElementById? (你應該等待domready或onload)

是否有可能覆蓋其他函數中的值?

+0

是的......,DOM是不加載 – bogdan 2010-10-10 13:55:24

+0

宣佈的onload執行的函數內部的變量...謝謝 – bogdan 2010-10-10 13:57:52

+0

@bogdan:沒問題,這是一個非常常見的初學者錯誤。 – some 2010-10-10 16:19:47

1

我認爲這個問題可能是,如果你聲明全局變量來,當該行被評估爲DOM未完全加載,因此該元素不可訪問。

當你在函數中聲明它時,只有在你調用該函數時纔會創建該變量,當時DOM很可能已經完全加載了。

+0

在onload中聲明瞭一個函數內部執行的變量......修復......謝謝大家! – bogdan 2010-10-10 13:59:18

1

當您調用getElementById時,您的頁面可能未完全加載。

確保在頁面加載完成後創建全局變量x。大多數圖書館都有辦法處理這個問題,例如jQuery具有「就緒」功能。如果你不想使用任何庫,當body元素調用onload事件時,你總是可以創建變量。

jQuery的風格:

$(function(){ 
    // create X here 
}) 

身體的onload風格:

<body onload="aFunctionThatCreatesYourVariable()"> 
相關問題