Ваша проблема заключается в том, что каждый раз, когда пользователь нажимает следующую кнопку, к кнопке отправки добавляется новый обработчик события щелчка.на самом деле делают это снова и снова.Если пользователь трижды щелкнет следующую кнопку перед отправкой, он трижды активирует функцию проверки и т. Д. ...
Вы можете справиться с этим, удалив все остальные обработчики событий щелчка каждый раз, когда добавляете событие,(Самый простой) Вы можете сделать это с помощью jquery off , например,
submitBtn.off().on('click', function (e) {
, где вы просто отвязываете все обработчики событий щелчка, прежде чем добавить свой новый.(Таким образом, вы всегда будете иметь обработчик событий одним кликом на кнопке отправки).Конечно, если вы хотите добавить к этой кнопке другие обработчики событий щелчка (не очень часто, но, возможно, иногда вы хотите это сделать), вы должны использовать это с осторожностью
Другой способ - просто не добавлять событие щелчкаобработчик каждый раз, когда нажимается следующая кнопка.Просто добавьте событие один раз за пределы вашей функции NextQuestion, как это (вне документа, если вы хотите, или внутри, это не имеет значения)
$(document).on("click", "#submitBtn", function(e) {
e.preventDefault();
var options = $('.option');
for (i = 0; i < options.length; i++) {
var option = options[i];
if ($(option).is(':checked')) {
// console.log(option);
userAnswerIndex = i;
// validation
Questions[n].validate(userAnswerIndex, keepScore);
}
}
});
или
function nextQuestion(){
// do everything else
}
var submitBtn = $('#submitBtn');
submitBtn.on('click', function (e) {
e.preventDefault();
var options = $('.option');
for (i = 0; i < options.length; i++) {
var option = options[i];
if ($(option).is(':checked')) {
// console.log(option);
userAnswerIndex = i;
// validation
Questions[n].validate(userAnswerIndex, keepScore);
}
}
})