#javascript #events #onclick
#javascript #Мероприятия #onclick
Вопрос:
Желаемый результат: после того, как пользователь выберет ответ, я хочу изменить score
переменную в: score = 1
если ответ правильный, либо вообще не меняется, если ответ неправильный.
Текущий результат: для каждого выбора, который делает пользователь, оценка остается неизменной : 0
.
Сначала я сохраняю абзац, который будет изменен, question_paragraph
и кнопку, на которую нажмет пользователь next_button
. Кроме того, я сохранил значение (я помещал атрибут value
для каждого ввода, используя обозначение массива — сначала 0, 1 секунду и т. Д.) user_answer
.
var question_paragraph = document.getElementById('question');
var next_button = document.getElementById('next');
var i = 0;
var user_answer = getCheckedValue(document.getElementsByName('choice'));
var y = 0;
var score = 0;
getCheckedValue
Функция вернет value
атрибут моего ввода, если он существует.
function getCheckedValue(radioObj) {
var radioLength = radioObj.length;
for(var z = 0; z < radioLength; z ) {
if(radioObj[z].checked) {
return radioObj[z].value;
}
}
return "Error!";
}
Вот в чем проблема. Функция работает нормально, за исключением изолированной области. allQuestion
это мой объект, в котором я сохранил вопросы, возможные ответы и правильный ответ correctAnswer
(я не включил его здесь, но работает правильно). Я ввел условный оператор для увеличения y
и code>score с единицей, если значение allQuestions[y].correctAnswer
соответствует значению user_choice
.
function changeQuestion() {
//PROBLEM
if(allQuestions[y].correctAnswer == user_answer){
score = 1;
y ;
} else{y ;}
//PROBLEM
i = (i < allQuestions.length) ? (i 1) : 0;
if (i == allQuestions.length) {
i = 0;
return question_paragraph.replaceChild(document.createTextNode(allQuestions[0].question), question_paragraph.firstChild);
}
var newNode = document.createTextNode(allQuestions[i].question);
console.log(score);
return question_paragraph.replaceChild(newNode, question_paragraph.firstChild);
}
Наконец, я вызвал addHandler
функцию.
function addHandler(name, type, handler){
if (name.addEventListener){
name.addEventListener(type, handler, false);
} else if (name.attachEvent){
name.attachEvent("on" type, handler);
} else {
name["on" type] = handler;
}
}
addHandler(next_button, 'click', changeQuestion);
Комментарии:
1. разве вы не должны подсчитывать y ; каждый раз, когда вызывается changeQuestion() ?
2. @JohnSmith это делает;
y
в обеих частях условия есть a .3. Откуда вы знаете, что он вообще пытается увеличиваться
score
? Вы поместили aconsole.log()
внутриif
?4. я изменил, все еще не работает.
5. Кроме того, в опубликованном вами коде есть только один вызов
getCheckedValue()
. После изменения вопроса разве вам не нужно вызывать его снова, чтобы получить новый ответ?
Ответ №1:
Ну, пока что здесь что-то кажется забавным. Прежде всего, я не вижу никакой инициализации переменной y. Если y является глобальной переменной, которая сохраняет свое значение, то, возможно, есть проблема с вашим объектом: allQuestions{} . Не могли бы вы предоставить код для построения вашего объекта allQuestions{}? Без этого я не думаю, что смог бы полностью ответить на этот вопрос, но я считаю, что именно в этом заключается ваша проблема.
Упс, это должен был быть комментарий, а не ответ, извините…
Комментарии:
1. я выполнил инициализацию, посмотрите на первый блок. Проблема заключалась в переменной user_answer, потому что ‘getCheckedValue’ будет вызван только один раз.