是否有可能复制JavaScript的prompt()的本机行为?

Hex*_*ory 2 javascript prompt execution

为了美学目的,我正在推出我自己的prompt()版本; 就视觉效果而言,它的表现相当不错,但我遇到了一个小问题:该函数的原生版本导致代码执行完全停止,直到处理完提示.

这是非常可爱的,这就是为什么下面的工作方式:

<script>
var c = prompt('Name?', '');
alert(c); // displays whatever the user entered
</script>
Run Code Online (Sandbox Code Playgroud)

然而,用我的方法,事情并不顺利.我正在使用对话框,输入框和"确定"按钮来收集用户的数据; 据我所知,数据收集工作完美; 也就是说,我确信在用户按下"确定"按钮后,我可以访问他们刚刚放入提示的数据.

但是,我不能找到一种方法让我的版本像本机版一样工作.那么,我的问题是:在你告诉它恢复之前,是否可以告诉JavaScript停止执行?

提前感谢您提供的任何和所有帮助.

Pao*_*ino 6

不,不可能复制此行为.实现相同效果的方法是在代码中使用回调,因此您可以执行以下操作:

myPrompt('Hello, mate, whats yer name?', function(answer) {
   alert(answer);
});
Run Code Online (Sandbox Code Playgroud)

编辑:根据您的代码,为什么不这样做?

<body>
<div id="prompt" style="display: none;">
<input type="text" id="q" /> <input type="button" value="OK" id="ok" />
</div>
<script>
$ = function(i) {return document.getElementById(i);}

_prompt = function(prompt, callback) {
    $('prompt').style.display = '';
    $('q').value = '';
    $('ok').onclick = function() {
        callback($('q').value);
    }
}

_prompt('Name?', function(answer) {
    alert(answer);  
});
</script>
</body>
Run Code Online (Sandbox Code Playgroud)

如果您alert(answer);改为说... gAnswer = answer;(请注意没有var声明)您将创建一个名为的全局变量gAnswer,您可以访问javascript代码中的任何其他位置,假设已经回答了提示.如果你担心污染你的空间的全局变量你可以将它全部包装在一个闭包中,但它应该没问题.