我的JS代码结构有一个奇怪的问题。它是Brainfuck到JavaScript的转换器。然后它运行它生成的代码。
考虑到这一点,我注意到prompt();
命令存在问题。在某些情况下,似乎在上一个命令(更改DOM)完成之前显示提示框。
我的解决方案是显示<input type="text">
框,最初在CSS中设置为display:none
。但是,我需要一种等待输入改变的方法。我试过这段代码:
while (document.getElementById("input") == ""){}
但这冻结了DOM。我需要一种被动地等待任何用户输入的方法,然后继续使用脚本。
请记住,我不能使用onkeydown,外部函数等。
谢谢!
答案 0 :(得分:1)
除了使用alert
,confirm
,prompt
等本机函数之外,无法停止脚本执行。
尝试将提示包装在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">