重新创建提示符(); <input />的功能

时间:2016-09-25 14:09:44

标签: javascript

我的JS代码结构有一个奇怪的问题。它是Brainfuck到JavaScript的转换器。然后它运行它生成的代码。

考虑到这一点,我注意到prompt();命令存在问题。在某些情况下,似乎在上一个命令(更改DOM)完成之前显示提示框。

我的解决方案是显示<input type="text">框,最初在CSS中设置为display:none。但是,我需要一种等待输入改变的方法。我试过这段代码:

while (document.getElementById("input") == ""){}

但这冻结了DOM。我需要一种被动地等待任何用户输入的方法,然后继续使用脚本。

请记住,我不能使用onkeydown,外部函数等。

谢谢!

2 个答案:

答案 0 :(得分:1)

除了使用alertconfirmprompt等本机函数之外,无法停止脚本执行。

尝试将提示包装在setTimeout内。从值0开始,看它是否有效。

setTimeout(function () {
  prompt('your prompt');
}, 0);

使用值为0的setTimeout会将提示的执行推送到事件循环的后面,并且可能在DOM更新后运行。

在此处阅读有关此技术的更多信息:https://www.quora.com/What-does-setTimeout-with-a-0ms-delay-do

答案 1 :(得分:1)

要以非阻塞方式等待用户输入,您需要运行异步代码。这是通过提供一个回调函数来实现的,该函数应该在发生特定事件时调用。在您的情况下,这可能是在提交输入值时:

var inp = document.getElementById("inp");

inp.addEventListener('change', function(e) {
  var value = this.value;
  alert('you entered: ' + value);
  // all code that needs the value, should come here,
  // or should be called from here.
});
Exit field to submit value:
<input id="inp">