Значение поля ввода отображается как неопределенное

У меня есть приложение, которое проверяет людей по их таблицам умножения. Сумма предоставляется пользователю, и затем он должен ввести свой ответ в поле ввода.

В большинстве случаев это работает, но значение поля ввода отображается как 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

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

Joseph Webber 17.07.2018 21:58

@JosephWebber, спасибо, что посмотрели на это. Я работал над проблемой и заметил глупую ошибку в том, как я получал правильный ответ. Однако, как вы говорите, логика неверна, поскольку ответ всегда на одну итерацию впереди того, где он должен быть.

Stuart Brown 17.07.2018 22:08
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
59
0

Другие вопросы по теме