2012-03-01 85 views
1

這樣的IM學習只​​是想出來的東西和好,問題是這樣的功能範圍和變量/移出所述功能

我知道一個函數外部定義的變量是無濟於事的所有而設置裏面一個一個函數不是。

是說,當我這樣做

HTML

<input type="text" name="field" id="field"/> 

<input type="submit" id="submit" name="submit"/> 

JS

var results = document.getElementById("field").value; 
var submitBtn = document.getElementById("submit"); 

function pushit(){ 
    aNames.push(results); 
    for(i=0; i<aNames.length; i++){ 
     document.write(aNames[i] + "<br/>"); 
    } 

    submitBtn.onclick = pushit; 
} 

這是行不通的。當提交被擊中時,它只顯示原始數組項目。

,但是當我改變功能,這一點:

function pushit(){ 
    var results = document.getElementById("field").value; 
    aNames.push(results); 
    for(i=0; i<aNames.length; i++){ 
     document.write(aNames[i] + "<br/>"); 
    } 
} 

本質上只是把VAR結果它工作在函數內部。我的?也就是爲什麼?

如果我想說的話,在窗體中檢查表單中某個字段的特定值,以同樣的方式檢查該表單的「值」與我想檢查的內容。 .im只是不理解爲什麼它不工作。

任何提示,鏈接,解釋等......我欣然讚賞。

+0

對不起,這是一個爛攤子,我忘了「編碼」到編碼部分,所以它把它扔在一起..現在更好 – somdow 2012-03-01 16:01:01

+0

請定義「不工作」。正如所寫,沒有明顯的原因,爲什麼在第一個版本中'results'的重複定義會阻止發佈的代碼工作。 – Alnitak 2012-03-01 16:01:34

+0

@Alnitak看到整個編輯歷史,混淆了那裏的東西。 – 2012-03-01 16:06:57

回答

3

第一個示例中的results變量在頁面加載時設置,並且從不更改。每次你讀它,它是相同的價值。

在第二個示例中,每次運行事件時都會從輸入中獲取值;你正在創造一個新變量。因此,你正在看到新的價值。

JavaScript DOM元素是「活」變量,但字符串不是。

例如:

var results = document.getElementById("field"); 
var submitBtn = document.getElementById("submit"); 

function pushit(){ 
    alert(results.results); 
} 

這可以作爲results是一個 「活」 的變量。當你訪問它時,它總是最新的DOM元素。

當你做var results = document.getElementById("field").value;,現在results只是一個字符串;它不再是「活」了。

+1

所以你的意思是說,當代碼被讀取時,「結果」的值是空的(或者是默認的),所以它的狀態不會改變...當按下按鈕時再次檢查... .GOTCHA!我認爲它始終貫穿始終,但......在btn新聞,它只檢查功能裏面的東西!謝謝你清理它。 – somdow 2012-03-01 16:07:01

+0

@somdow:很高興我能幫忙:) – 2012-03-01 16:09:08