私は7つの選択ボックスと送信ボタンで構成された非常に簡単なクイズを持っています。私が達成しようとしているのは、選択ボックスのどれもが変更されていない場合、およびそれらがスコアを上げるために変更されている場合、警告エラーをポップアップすることです。変更された変数を取得しない関数です。グローバルではありませんか?
私は 'changed'という変数を設定しました。これはfalseです。これらの選択ボックスの1つが変更されると、「変更されました」がtrueになります。
これは機能しますが、送信ボタンを押すとコンソールのログが表示され、スコアを表示する機能が呼び出されます「変更されました」がTRUEに変更されたことを認識していないような警告が表示されます。
相続人のjQuery ...
var changed = false;
$('select').on('change', function() {
var changed = true;
console.log('TRUE');
});
$("#button").click(function(){
var correct = 0;
var selectValue;
var questions = document.getElementsByClassName("question");
var numOfQuestions = questions.length;
for(var i = 0; i < questions.length; i++){//begin for loop
//get the value of the select element
selectValue = questions[i].options[questions[i].selectedIndex].value;
//if the value equals right
if(selectValue === "right"){//begin if then
//increment the correct variable
correct++;
}//end if then
}//end for loop
if(changed === false){
$('#scoreDisplay span').append('WARNING');
}
else{
$('#scoreDisplay span').append(correct);
}
});
かかわらず、あなたがどんな選択ボックスを変更したかどうかの、あなたはここにアクションでそれを見ることができますが、あなたが提出クリックしたとき、それは単に「WARNING」を示す表示されます... http://gogeye.com/connectquiz/index.html
'var changed = true;'を 'changed = true;'に変更します。そこのローカルスコープで再宣言します。 – Aeolingamenfel
@Aeolingamenfelが言ったことをやってください。その理由は、その前にvarを置くと、同じ名前のローカルバージョンが作成され、javascriptのデフォルトでは、グローバルバージョンではなくローカルバージョンが使用されるからです。 – nurdyguy