2012-03-12 53 views
1

這是我的javascript代碼:新的JavaScript,寫一個基本功能

var num1; 
function press_Button(){ 
    num1 = 3;   
} 

然後,我有這個按鈕:onclick="press_Button()"

,並在HTML是這樣的:

<script type="text/javascript"> 
    document.write(num1); 
</script> 

即使在按下按鈕後,頁面仍將變量顯示爲未定義,但我無法弄清楚原因。

幫助!

+0

簡單的解釋:因爲'文件撰寫(NUM1);之前'press_Button'被稱爲執行'(你單擊該按鈕)。 'num1'目前還沒有價值。 – 2012-03-12 02:54:13

回答

4

在您致電press_Button後,您需要更新num1的顯示。我會做的是溝文件撰寫,而是做一個跨度:

<span id="num1Display"></span> 

然後:

function press_Button() { 
    num1 = 3;   
    document.getElementById("num1Display").textContent = num1; 
} 

或者,如果你需要這個古老的瀏覽器不喜歡工作的textContent,你可以這樣做:

function press_Button() { 
    num1 = 3;   
    document.getElementById("num1Display").innerHTML = num1; 
} 
+0

你不能直接這樣寫嗎?我只是不明白爲什麼這不起作用?我真的很感激你 – Axschech 2012-03-12 02:52:52

+0

@Axschech - no。 'num1'只是一個javascript變量。我的意思是,你可以用文檔寫出它的值。寫',但如果稍後更新'num1',則頁面上的值將不會*更新爲新值。這就是爲什麼你仍然可以看到'undefined',即使你已經更新了'num1' – 2012-03-12 02:55:14

+0

,但爲什麼即使點擊按鈕後它顯示爲undefined? – Axschech 2012-03-12 02:55:48

5

這是因爲document.write方法輪流值轉換成字符串,它被寫入網頁的源代碼。

編寫源代碼後,變量和源代碼中的文本之間沒有連接。無論你對變量做什麼都不會有什麼曾經在源代碼創建時寫入的機會。

無論何時更新變量,如果希望更改可見,還必須更新頁面中的內容。你不能改變的源代碼在創建後,所以你需要,你可以針對一個元素,例如跨度圍繞價值:

<span id="num1Container"><script>document.write(num1)</script></span> 

使用getElementById方法來獲取元素:

function press_Button() { 
    num1 = 3; 
    document.getElementById('num1Container').innerHTML = num1.toString(); 
} 
+0

+1 - 很好的解釋。 – 2012-03-12 02:57:38

+0

謝謝你的幫助! – Axschech 2012-03-12 03:02:11

1

當調用document.write時,num1是未定義的,因爲該按鈕尚未被點擊。當頁面加載時,document.write被調用一次,寫入一個變量的字符串表示,然後返回 - 它的工作完成。當num1的值改變時,顯示的值不會改變。

要修改點擊按鈕時的顯示值,press_Button必須修改dom。見上面的答案。

我不會推薦內嵌onclick處理程序的元素,但。使用這個來代替:

<button type="button" id="button">Click</button> 

那麼你的javascript:

document.addEventListener('DOMContentLoaded', function() { 
    document.getElementById('button').addEventListener('click', function() { 
     // Code here 
    }, false); 
}, false);