Как остановить выполнение приведенного ниже кода JavaScript при получении подсказки - PullRequest
0 голосов
/ 19 мая 2018

Это мой код:

for (i = 0; i < 2; i++) {

    $("div").append("I Want to Display this before user enter input in Prompt <br>")
    setTimeout(function() {
        input = prompt("test");
        //PUT more code here
    });
    $("div").append("I Want to Display this after user enter input in Prompt")

}

Вот скрипка: скрипка

Это то, что я хочу

IХотите отобразить это перед тем, как пользователь вводит данные в приглашении

Теперь возьмите ввод

Я хочу отобразить это после ввода ввода пользователем в подсказке

Я хочу отобразить это перед вводом пользователяВвод в приглашении

Теперь принять ввод

Я хочу отобразить это после ввода пользователем ввода в приглашении

Я хочу получить ввод от пользователя таким образом.Если не по подсказке, то по-другому?

Ответы [ 3 ]

0 голосов
/ 19 мая 2018

Вам нужно сохранить это append в div внутри функции setTimeout(), и вы также можете проверить, что значение input равно null или нет для ввода пользователем.Кроме того, используйте setInterval(), чтобы отображать подсказку, как в обновленном вопросе, чтобы при нажатии клавиши cancel подсказка закрывалась навсегда.

$("div").append("I Want to Display this before user enter input in Prompt <br>")
var promptLoop = setInterval(function(){
  var input = prompt("test");
  if(input !== null && input.trim() !== ''){
    $("div").append("<br/>I Want to Display this after user enter input in Prompt. User input is " + input)
  } else {
    clearInterval(promptLoop);
  }
}, 1000);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div></div>
0 голосов
/ 19 мая 2018

Проблема с вашим кодом в том, что функция setTimout является асинхронной, что означает, что блок кода, который находится внутри нее, не выполняется сразу, а вместо этого помещается в event queue, который ожидает, пока все остальныевыполняется код в той же области, и только затем он выполняется.

Если вы хотите выполнить какой-то код только после того, как пройдет задержка setTimeout, вам нужно поместить весь этот код внутриsetTimeout.

$("div").append("I Want to Display this before user enter input in Prompt <br>")
setTimeout(function() {
    const input = prompt("test");
    //PUT more code here

    $("div").append("I Want to Display this after user enter input in Prompt")
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div></div>
0 голосов
/ 19 мая 2018

Пожалуйста, смотрите обновленный код.

https://jsfiddle.net/sa5ownd8/7/

добавил код append сразу после функции prompt.

...