Сохранить оценку в переменной после события

#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 ? Вы поместили a console.log() внутри if ?

4. я изменил, все еще не работает.

5. Кроме того, в опубликованном вами коде есть только один вызов getCheckedValue() . После изменения вопроса разве вам не нужно вызывать его снова, чтобы получить новый ответ?

Ответ №1:

Ну, пока что здесь что-то кажется забавным. Прежде всего, я не вижу никакой инициализации переменной y. Если y является глобальной переменной, которая сохраняет свое значение, то, возможно, есть проблема с вашим объектом: allQuestions{} . Не могли бы вы предоставить код для построения вашего объекта allQuestions{}? Без этого я не думаю, что смог бы полностью ответить на этот вопрос, но я считаю, что именно в этом заключается ваша проблема.

Упс, это должен был быть комментарий, а не ответ, извините…

Комментарии:

1. я выполнил инициализацию, посмотрите на первый блок. Проблема заключалась в переменной user_answer, потому что ‘getCheckedValue’ будет вызван только один раз.