2016-12-08 21 views
0

これはクイズの1つです。あなたがあなたの答えを選択するとヒットすると1グローバル変数を呼び出す

のうち「送信」それはず出力あなたの答えとあなたのスコアは、問題は、それが正しく「VAR応答」を読んでいません - それは未定義出てきます。私は、私は現在、2つのresponse変数、というグローバルとに割り当てられた最初のものを持っている

すべてのヘルプは高く評価され:)

<p id="question"> 
<button type="button" class="start" onclick="test();">Start</button> 
</p> 

<p id="here"></p> 

<script> 

    function test() { 
     document.getElementById("question").innerHTML = 
      "<p>What color is the sky? <select id='list' onchange='score();'><option value='Not Sure' selected>Not Sure</option><option value='Blue'>Blue</option><option value='Red'>Red</option></select></p><button type='button' onclick='submit();'>submit</button>"; 
    } 

    var total = 0; 
    var response = document.getElementById('list').value; 
    function score() { 
     var response = document.getElementById('list').value; 
     if (response === "Blue") { 
      total++; 
     } 
    } 

    function submit() { 
     document.getElementById("here").innerHTML = 
      "Your Answer:" + response + "<br />" + total + "/1"; 
    } 

</script> 
+0

問題があるの内側に、この変数を割り当てることで試すことができます。そして、後でこれを(恐らく空の)_response_を使用します。しかし、nnnnnnのように、フィールドの現在の値が必要なときはいつでも(例えばsubmit関数で)これを行う必要があります。 – Tobi

+0

送信時にあなたの応答が設定されていません。サブミット関数で 'response = doc ........ lue'を実行します。何が起こるか見てみてください。また、あなたは 'var response'を2回行う必要はありません – progrAmmar

答えて

2

あなたの問題を解決することができます目の第2のセットを期待していた

まだ存在しないフィールドからの値であり、第2のフィールドはscore()関数内のローカルである。

あなたは関数外宣言変数する必要がありますが、score()その値を設定します。

function test() { 
 
    document.getElementById("question").innerHTML = 
 
     "<p>What color is the sky? <select id='list' onchange='score();'><option value='Not Sure' selected>Not Sure</option><option value='Blue'>Blue</option><option value='Red'>Red</option></select></p><button type='button' onclick='submit();'>submit</button>"; 
 
} 
 

 
var total = 0; 
 
var response = "Not sure"; 
 
function score() { 
 
    // 'var' removed from following line: 
 
    response = document.getElementById('list').value; 
 
    if (response === "Blue") { 
 
     total++; 
 
    } 
 
} 
 

 
function submit() { 
 
    document.getElementById("here").innerHTML = 
 
     "Your Answer:" + response + "<br />" + total + "/1"; 
 
}
<p id="question"> 
 
<button type="button" class="start" onclick="test();">Start</button> 
 
</p> 
 

 
<p id="here"></p>

(また、ではないあなたが求めているもの、それscore()を選択要素のonchangeから呼び出すことは理にかなっていません。なぜなら、ユーザーが心をブルーからレッドに変更すると何度もtotal変数が数回インクリメントされ、3/1のようなスコアが得られます。

+0

ありがとうございます! – anon

0

functionスコープ内でグローバル変数を再定義する以下の方法では、 "var"を削除することができます。

function score() { 
     response = document.getElementById('list').value; 
     if (response === "Blue") { 
      total++; 
     } 
    } 
0

問題は、この行の行は、DOM内のid list存在を持つ要素がない解析され

var response = document.getElementById('list').value; 

であると思われます。したがって、undefinedが表示されています。

はあなたがVaRの_response_にページの読み込み中に_value_を読むこと、test機能

function test() { 
    document.getElementById("question").innerHTML = 
    "<p>What color is the sky? <select id='list' onchange='score();'><option value='Not Sure' selected>Not Sure</option><option value='Blue'>Blue</option><option value='Red'>Red</option></select></p><button type='button' onclick='submit();'>submit</button>"; 
    response = document.getElementById('list').value; 

} 

DEMO

+0

これはうまくいきません - デモでは、送信ボタンをクリックすると現在の選択肢が表示されません。 – nnnnnn

+0

@nnnnnnの目的は「未定義」の問題を解決することでした。したがって、私は彼が残りのコードを解決することを期待していないと思う – brk

関連する問題