#javascript
#javascript
Вопрос:
var num1 = Math.floor(Math.random()*9 1);
var num2 = Math.floor(Math.random()*9 1);
var num_multiple = num1 * num2;
var form = document.querySelector('form');
var input = form.querySelector('input');
var button = form.querySelector('button');
var quesiton = document.querySelector('.p1');
var result = document.querySelector('.p2');
quesiton.textContent = String(num1) " multiplication " String(num2) " = ? ";
form.addEventListener("submit",function(e){
e.preventDefault;
if(num_multiple === Number(input.value)){
num1 = Math.floor(Math.random()*9 1);
num2 = Math.floor(Math.random()*9 1);
num_multiple = num1 * num2;
quesiton.textContent = String(num1) " multiplication " String(num2) " = ? ";
input.value = "";
result.textContent = "good";
input.focus();
}
else{
input.value = "";
result.textContent = "bad";
input.focus();
}
})
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div><p class="p1"></p></div>
<form>
<input type="text">
<button>submit</button>
</form>
<div><p class="p2"></p></div>
<script src="multiple.js"></script>
</body>
</html>
Мне жаль, что я не говорю по-английски, поэтому я использую переводчик для перевода.
Проблема в том, что если значения num_multiple и number (input.value) равны, «хорошо» появляется очень быстро и очень быстро исчезает. Кроме того, input.focus(); не работает.
Проблема в том, что новый вопрос записывается в quesiton, даже если значения num_multiple и number(input.value) не равны.
Как я должен исправить код?
Комментарии:
1. Как насчет использования a
setTimeout
?
Ответ №1:
Вам нужно вызвать e.preventDefault
, т.е. сделать e.preventDefault()
вместо e.preventDefault
. Это приводит к перезагрузке страницы (поведение отправки по умолчанию), следовательно input.focus()
, не работает
Ответ №2:
Вы забыли скобки в конце e.preventDefault (чтобы сделать его функцией). Кроме этого, я также обновил ваш код, чтобы УДАЛИТЬ его. DRY означает «Не повторяйся». У вас было несколько строк повторяющегося кода, которые я поместил в одну функцию setNumbers()
, чтобы сделать ее СУХОЙ. Я также превратил result.textContent
строки в один троичный оператор: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator
var num1, num2, num_multiple
var form = document.querySelector('form');
var input = form.querySelector('input');
var quesiton = document.querySelector('.p1');
var result = document.querySelector('.p2');
function setNumbers(){
input.value = "";
num1 = Math.floor(Math.random() * 9 1);
num2 = Math.floor(Math.random() * 9 1);
num_multiple = num1 * num2;
quesiton.textContent = String(num1) " multiplication " String(num2) " = ? ";
input.focus();
}
form.addEventListener("submit", function(e) {
e.preventDefault();
var correctAnswer = num_multiple === Number(input.value);
result.textContent = correctAnswer ? "good" : "bad";
if(correctAnswer){
setNumbers()
}
})
setNumbers()
<div>
<p class="p1"></p>
</div>
<form>
<input type="text">
<button>submit</button>
</form>
<div>
<p class="p2"></p>
</div>
<script src="multiple.js"></script>
Комментарии:
1. Это мой первый вопрос, и я очень рад получить такой замечательный ответ и благодарю вас. У меня есть еще один вопрос, но если ответ неправильный, вопрос будет обновлен новым вопросом, так можем ли мы снова не обновлять неправильный вопрос?
2. @banghogu Извините, я не совсем понимаю. Если у вас есть новый вопрос, который достаточно похож на этот текущий, вы можете задать его в комментариях или отредактировать этот вопрос, чтобы задать его. Если это что-то другое, возможно, вы захотите просто задать совершенно новый вопрос.
3. Извините, я пытался сказать, что если ответ был неправильным (num_multiple === Number (input.value)), я не хочу, чтобы Qesiton.textContent менялся на новый вопрос.
4. @banghogu Теперь я понимаю. Смотрите мою правку. Я переместил
num_multiple === Number(input.value);
строку в вызываемую переменнуюcorrectAnswer
. Затем, еслиcorrectAnswer
это true , он вызываетsetNumbers()
.5. Это отличный ответ. Спасибо вам большое, очень большое. Сегодня я получил рекомендацию для этого сайта, и я думаю, что это действительно хорошо. Надеюсь, у вас хороший день.