#javascript
#javascript
Вопрос:
В сообщении с запросом я запрашиваю номер, я хочу обновить элемент DOM (input), но работает только тогда, когда заканчивается do — while, я хочу обновлять DOM после каждого сообщения с запросом.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Odds and Evens Game</title>
</head>
<body>
<form>
Number: <input type="text" id="number">
<input type="button" onclick="showIt()" value="ShowIt">
</form>
<script>
function showIt(){
var inputval ;
do {
inputval = prompt('Enter a number between 1 and 5 , 999 to exit');
number = parseInt(inputval);
document.getElementById('number').value= number;
}while(number !== 999);
}
</script>
</body>
</html>
пример, который выполняется:
https://jsfiddle.net/neossoftware/73ag8whd/4
Ответ №1:
prompt
окно prevents the user from accessing the rest of the program's interface until the dialog box is closed
. Ваш цикл while снова и снова вызывает prompt, блокируя доступ к пользовательскому интерфейсу.
Используйте await, чтобы нарисовать окно перед вызовом второго запроса.
let num = 0;
let ele = document.querySelector('#num');
(async () => {
do {
await getInput()
ele.value = num;
await sleep(0);
} while(num !== 999);
})();
function sleep(ms) {
return new Promise(resolve => {
setTimeout(resolve, ms);
})
}
function getInput() {
return new Promise(resolve => {
num = Number(prompt("Enter num"));
resolve(num);
});
}
Number: <input type="text" id="num">
Ответ №2:
Возможно, я не совсем понимаю вопрос, поскольку ваш код работает без ошибок, за исключением последнего 999
бита exit (в Firefox, Linux), поскольку этот код затем обновляет ваш ввод до 999
. Почему у вас это есть 999 to exit
в любом случае?
Некоторые незначительные изменения и опции ниже:
function showIt(){
var inputval, num;
do {
inputval = prompt('Enter a number between 1 and 5 (inclusive), 999 to exit');
num = parseInt(inputval);
if ((num != NaN) amp;amp; (num >= 1) amp;amp; (num <= 5) amp;amp; (num != 999)) {
document.getElementById('number').value = num;
}
} while (num !== 999);
}
function updateAndExit(e) {
var inputval = prompt('Enter a number between 1 and 5 (inclusive)');
var num = parseInt(inputval);
if ((num != NaN) amp;amp; (num >= 1) amp;amp; (num <= 5)) {
this.textContent = num;
}
}
window.onload = function() {
var d = document.getElementById("click-to-udpate");
if (d) {
d.addEventListener("click",updateAndExit,false);
}
}
.fakeInput {
border:1px solid #886;
padding:6px;
background:#ddd;
}
.fakeInput:hover {
border:1px solid #688;
background:#fff;
cursor:pointer
}
Number: <input type="text" disabled="disabled" id="number">
<input type="button" onclick="showIt()" value="ShowIt">
<p>
Different option below:
</p>
<div id="click-to-udpate" class="fakeInput">Click to update</div>
Комментарии:
1. OP хочет, чтобы каждое введенное пользователем значение (взятое из окна подсказки) отображалось в
input
элементе. Ноinput
значение элемента обновляется один раз, т.е. после выхода изdo..while
цикла.2. @randomSoul : Не в Firefox в Linux. Входные данные обновляются каждый раз для меня, а затем заменяются при повторном изменении. Это может быть ограничением (особенностью) используемого браузера. Если пользователь хотел, чтобы значения были объединены, это что-то другое, но изменение незначительное.