2017-02-05 1 views
0

私は比較的新しいjavascriptなので、このコードを動作させることはできません。私はどのようにダウンメニューを使用することを探ってきたが、私はこのコードを実行しようとするたびに動作していないようです。 form.value = "net"を設定すると、if文が動作するので、なぜform.value = "test"を比較するとうまくいかないのですか?Javascriptを利用しています。このコードで何が問題になっていますか?

<!DOCTYPE html> 
<html> 
<head> 
    <title> Hello</title> 
</head> 
<body> 
<form> 
<input type="text" value="Name here" id="testing" /> 
</form> 
<br/> 
<select id="inout"> 
    <option value="net" selected="selected">next</option> 
    <option value="test">test</option> 
</select> 
</body> 
<script type="text/javascript"> 
    var form; 
    var actual; 
    form = document.getElementById('inout'); 

    form.addEventListener('change', test(), false); 

    function test() 
    { 


     if(form.value == "test") 
     { 
      window.location.href = 'index.html'; 
     } 
    } 

</script> 
<style type="text/css"> 
    body{ 
     text-align: center; 
    } 
</style> 

</html> 

編集:ありがとうございました。これは本当にイライラしました。

+0

もしあなたがcバックグラウンドを持っていれば、 'test()'は関数を直接呼び出して実行する関数呼び出しと考えてください。あなたが必要とするのは 'test'です。 –

答えて

0

リスナーを正しく設定していません。

form.addEventListener('change', test(), false);

お知らせtestが後()を持っていますか?これは、関数を実行したことを意味します(何も返しません)。

form.addEventListener('change', undefined, false);

ですから、変更するたびに何もドロップダウンがすべてで起こる:これはあなたのプログラムが実際に何をするかです。フォームの変更、機能testを実行するとき

form.addEventListener('change', test, false);

:それはこのように見ている必要があります。

2

これを変更します。この

form.addEventListener('change', test, false); 

form.addEventListener('change', test(), false); 

あなたがテストを()書きするとき、それは変更イベントですぐに機能しない呼び出します。

3

form.addEventListener('change', test(), false);にあなたはtestを呼び出しているとaddEventListenerへのコールバックとしてその戻り値(undefined)を渡します。

addEventListenerには、2番目の引数として関数が必要です。 「変更」イベントがformによって参照される要素にバブルアップするたびに

を:

form.addEventListener('change', test, false); 

は、あなたが言うように、その行を理解することができます:構文的には、それはあなたのコード内の関数名の後の括弧を除去することを意味しますtestが参照する関数を呼び出します。

+0

その関数への参照で、イベントが発生したときに渡された参照を使ってその関数を呼び出すことができます! –

関連する問題