2012-03-01 12 views
1

はので、私は1の内部に設定しながら、関数の外で定義された変数は、すべての無駄であることを知って勉強したり、ちょうど何かをしようとしてIMと同様、質問はこの関数スコープ&変数は機能

であります機能はありません。

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

それは動作しません。私はこの

HTMLを行うときに言っ

。送信がヒットした場合、元の配列項目が表示されます。

しかし、私はこれに機能を変更する場合:

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

は、本質的にちょうどそれが動作関数内のvar結果を置きます。じぶんの ?なぜですか?

例えば、フォームのフィールドの特定の値のフォームをチェックインする場合は、idのチェックと同じ方法で、その値をチェックしたいものと比較します。なぜそれが働かないのか理解していない。

ヒント、リンク、説明など...私は喜んで感謝します。

+0

申し訳ありませんが、コード化された部分に「コード」するのを忘れてしまったので、すべて一緒に投げました。より良い今 – somdow

+0

「動作しません」と定義してください。書かれているように、最初のバージョンの 'results'の重複した定義が、投稿されたコードが動作しないようにする明確な理由はありません。 – Alnitak

+0

@Alnitakは全体の編集履歴を見ることができます。 –

答えて

3

最初の例では変数resultsが設定され、ページがロードされるときに設定され、決して変更されません。あなたがそれを読むたびに、それは同じ価値です。

2番目の例では、イベントが実行されるたびに入力から値を取得しています。あなたは新しい変数を作っています。したがって、あなたは新しい価値観を見ています。

JavaScript DOM要素は「ライブ」変数ですが、文字列はありません。例えば

resultsは "ライブ" 変数であるよう

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

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

これは動作します。アクセスすると、常に最新のDOM要素になります。

var results = document.getElementById("field").value;を実行すると、resultsは単なる文字列です。もはや「生きている」というわけではありません。

+1

だから、コードを読み込んだときに "result"の値が空であれば(デフォルトでは何でも)、その状態は変わらない。 .GOTCHA!私はそれが一貫していると思ったが...btn pressでは、関数内のwhatsだけがチェックされます。それをクリアしていただきありがとうございます。 – somdow

+0

@somdow:うれしい –