Я делаю викторину с несколькими вариантами ответов. Когда я удаляю прослушиватель событий, я не могу заменить его новым прослушивателем событий.

Смотрите мой код ниже ...

choiceC.removeEventListener('click', firstQuestion());

choiceC.addEventListener('click', function (event) {
    question.appendChild(feedback);
});

choiceB.removeEventListener('click', firstQuestion());

// Correct Answer
choiceB.addEventListener('click', function (event) {
    thirdQuestion();
});

SelectionC был предыдущим правильным выбором, который перемещает пользователя к следующему вопросу. Я хочу заменить этот прослушиватель событий обратной связью о том, что выбор пользователя неверен. выбор B — новый правильный ответ. Я хочу удалить прослушиватель событий, который ранее уведомлял о том, что выбор пользователя был неправильным, и заменить его функцией, которая переходит к следующему вопросу.

Полные файлы HTML, CSS и JavaScript см. в моем репозитории GitHub: https://github.com/billyhao12/ Код-викторина

Заранее спасибо всем, кто помогает.

1
Billy 27 Апр 2020 в 09:46
1
Такие функции, как addEventListener() и removeEventListener(), требуют передачи функции reference. Похоже, вы вызываете firstQuestion() inline и передаете возвращенный результат в removeEventListener(). Вероятно, вам следует ссылаться на firstQuestion, а не на firstQuestion().
 – 
kmoser
27 Апр 2020 в 10:01

1 ответ

Вы должны сохранить ссылку на функцию, поэтому:

choiceC.addEventListener('click', firstQuestion);

choiceC.removeEventListener('click', firstQuestion);

// your new function replacing the firstQuestion func
choiceC.addEventListener('click', function (event) {
    question.appendChild(feedback);
});
0
EugenSunic 27 Апр 2020 в 10:07