2016-07-30 6 views
0

私はクライアントのアプリを書いている途中です。入力すると、成分を検索するボタンをクリックします。 「すべて」を入力すると、すべてのレシピを含むページにリダイレクトされます。Javascriptが突然値を読み取れません

私はこれを開始しましたので、すべての機能が私が行った唯一の部分です。 正常に動作していました。練習のために、あなたはFacebookのURLにリダイレクトする "すべて"を入力したときにそれを持っていました。どこからでも(新しい変更なし)、それは私にエラーを投げ始めました、それは入力を読んでいなかった、それはnullとしてそれを読んでいた。

関連するHTML:

<input type="text" id="alcohol"> 
<h4 class="btn" type="submit" onclick="whole()"> Search</h4> 

JS:

var input = document.getElementById('alcohol').value; 

function whole() { 
    if (input == "all") { 
     window.location = "http://www.facebook.com"; 
    }; 
}; 

ここで何が起こっていますか?なぜそれは機能しなくなったのですか?

+1

入力値が空の文字列になるためです。入力変数の代入を「全体」関数の中に入れます。 – evolutionxbox

+0

上記のようなものは、「準備完了」または「ロード」イベントを使用せずに入力をターゲットにしているためだと思います。 –

+0

準備完了イベントまたはロードイベントは役に立ちません。一度割り当てられた入力の値は変更されません。 – evolutionxbox

答えて

7

確かに知るには、より大きなコンテキストを見る必要がありますが、アルコール値が最新値を含むには早すぎると思われます。

あなたはアルコールフィールドの現在の値とwhole()機能を動作させるためにこれに変更することができます。

function whole(){ 
    var input = document.getElementById('alcohol').value; 
    if (input =="all"){ 
     window.location="http://www.facebook.com"; 
    }; 
    }; 

このことを覚えておいてください:

var input = document.getElementById('alcohol').value; 

は時の電流値を取得していますコード行が実行されます。そのフィールドへの今後の変更は、input変数には影響しません。その変数には、特定の時点からの値のみが含まれます。このような問題を避ける最も簡単な方法は、必要な時にすぐに値を取得することです。

+0

または、 'var input = document.getElementById( 'alcohol');'要素への参照を保持し、現在の値を取得する 'input.value'。 (要素が解析された後にJSが実行されると仮定します) – nnnnnn

+0

jfriend00は正しいです。スクリプトがロードされたときに値を読み取ろうとしていて、htmlが存在する前にproberly存在しています。 –

関連する問題