【问题标题】:How to stop the execution of below javascript code when taking prompt提示时如何停止执行以下javascript代码
【发布时间】:2018-05-19 09:30:41
【问题描述】:

这是我的代码:

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")

}

这里是小提琴:fiddle

这就是我想要的

我想在用户输入提示之前显示这个

现在输入

我想在用户在 Prompt 中输入输入后显示此内容

我想在用户输入提示之前显示这个

现在输入

我想在用户在 Prompt 中输入输入后显示此内容

我想以这种方式接受用户的输入。如果不是通过提示,那么还有其他方式吗?

【问题讨论】:

  • 只需将较低的append 放在setTimeout 函数的底部
  • @CertainPerformance 我想我没有正确解释我的问题。请查看更新后的代码
  • @sdad 那么您希望什么时候停止提示?我看到您在更新后的问题中有两个提示。

标签: javascript jquery angularjs prompt


【解决方案1】:

您需要将append 保留在setTimeout() 函数内的div 中,您还可以检查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>

【讨论】:

  • 我想我没有正确解释我的问题。请查看更新后的代码
  • @sdad 那么您希望什么时候停止提示?我看到您在更新后的问题中有两个提示。
  • 就像 tubro C++ 编译器中的输入一样。我希望提示像那样工作。首先显示一个文本 > 接受输入 > 停止提示 > 显示稍后的文本 > 开始下一个循环 > 首先显示一个文本 > 接受输入 > 停止提示 > 显示稍后的文本 > 停止程序。
  • 在该代码中使用 while 循环使其成为连续循环
  • While 循环不能解决问题。请参阅问题中的预期输出。你能更新你的小提琴吗?
【解决方案2】:

请查看更新后的代码。

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

prompt 函数之后添加了append 代码。

【讨论】:

  • 我想我没有正确解释我的问题。请查看更新后的代码
  • @sdad 那么您希望什么时候停止提示?我看到您在更新后的问题中有两个提示。
【解决方案3】:

您的代码的问题是 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>

【讨论】:

  • 我想我没有正确解释我的问题。请查看更新后的代码
  • @sdad 那么您希望什么时候停止提示?我看到您在更新后的问题中有两个提示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-22
  • 1970-01-01
  • 2020-08-15
  • 1970-01-01
  • 1970-01-01
  • 2021-01-18
相关资源
最近更新 更多