У меня есть приложение, которое проверяет людей по их таблицам умножения. Сумма предоставляется пользователю, и затем он должен ввести свой ответ в поле ввода.
В большинстве случаев это работает, но значение поля ввода отображается как undefined, а не значение, вводимое пользователем.
let timesTableNumber = 2;
let listOfTables = [2,3,4,5,6,7,8,9,10,11,12];
let spellingItems = listOfTables.length;
let spellingItemShown = 0;
let checks = 0;
let answers = {
rightAnswers: 0,
wrongAnswers: [],
numberOfSpellings:spellingItems,
spellingGroup: "{{spelling.group}}",
spellingId: "{{spelling._id}}",
spellingcreatedBy: "{{spelling.createdBy}}",
user: "{{user._id}}"
};
var checkSpellings = setInterval(function() {
if (spellingItemShown > checks) {
checkAnswer();
}
if (spellingItemShown < spellingItems){
document.getElementById('spellings').innerHTML = timesTableNumber + 'x' + listOfTables[spellingItemShown];
document.getElementById('answer').innerHTML = timesTableNumber * listOfTables[spellingItemShown];
//hide the spelling to be tested for x seconds
var hideSpellings = setInterval(function() {
document.getElementById('spellings').style.visibility = 'hidden';
document.getElementById('form').style.removeProperty( 'visibility' );
document.getElementById('spelling').focus();
clearInterval(hideSpellings);
}, 3000);
document.getElementById('spellings').style.removeProperty( 'visibility' );
document.getElementById('form').style.visibility = 'hidden';
spellingItemShown ++;
} else{
//We're done!
console.info('there were '+ answers.rightAnswers + ' right answers and the wrong answers were '+ answers.wrongAnswers);
//post to server desired info....
// axios.post('/spellings', answers);
//showResults();
console.info(answers);
clearInterval(checkSpellings);
}
}, 7000);
function checkAnswer(){
console.info('checkAnswer:');
var correctAns = timesTableNumber * listOfTables[spellingItemShown];
var userAns = document.getElementById('spelling').value;
console.info('correctAns', correctAns);
console.info('userAns', userAns);
// debugger;
if (userAns == correctAns){
console.info('FOOOOOO');
answers.rightAnswers ++;
} else {
console.info('yo');
answers.wrongAnswers.push(document.getElementById('spellings').innerHTML);
}
document.getElementById("spelling").value = "";
checks++
} <div class = "row">
<div class = "col-xs-12 col-sm-8 col-md-6 col-sm-offset-2 col-md-offset-3">
<div id = "spellingTest">
<h2 id = "spellings"></h2>
<p id = "answer" class = "answer" style = "visibility:hidden"></p>
<div id = "form" class = "spellings" style = "visibility:hidden">
<label for = "spelling"> attempt</label>
<input type = "number" class = "form-control" id = "spelling" name = "spelling">
</div>
<h3 id = "spellingResults">Your results will show below at the end of the test.</h3>
</div>
</div>
</div>Может ли кто-нибудь помочь мне понять, почему это происходит и как это решить?
Изменить - я решил проблему undefined, изменив значение userAns на var userAns = document.getElementById('spelling').value;. Однако теперь возникает проблема, заключающаяся в том, что правильный ответ всегда на один впереди фактического правильного ответа, например. правильный ответ для 2x2 отображается как 6, а не 4, а 3x2 отображается как 8, а не 6
@JosephWebber, спасибо, что посмотрели на это. Я работал над проблемой и заметил глупую ошибку в том, как я получал правильный ответ. Однако, как вы говорите, логика неверна, поскольку ответ всегда на одну итерацию впереди того, где он должен быть.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я не могу воспроизвести проблему, он всегда регистрирует введенное мной значение ввода, а не
undefined. Однако логика вашего кода требует исправления. 2x2 = 4, но в журнале указано, что правильный ответ - 6. Кроме того, ответ на последний вопрос регистрируется какNaN.