Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript/JQuery等待用户输入_Javascript_Jquery_Html - Fatal编程技术网

Javascript/JQuery等待用户输入

Javascript/JQuery等待用户输入,javascript,jquery,html,Javascript,Jquery,Html,我正在开发一个基于文本的浏览器游戏,它使用Javascript和JQuery制作。 我遇到了用户输入的问题。 我过去所做的只是使用一个prompt(),因为它很容易使用,允许我将输入保存到变量中,并使代码等待输入 现在我希望它看起来更好,所以我用一个漂亮的聊天框在上面创建了自己的输入字段。 我想知道的是,在用户按下enter键之前,如何停止代码的执行(我已经检测到enter键,并且文本被追加到对话框中,我只需要代码等待它发生,然后再继续) 以下是我的一些代码: 输入函数 function inp

我正在开发一个基于文本的浏览器游戏,它使用Javascript和JQuery制作。 我遇到了用户输入的问题。 我过去所做的只是使用一个
prompt()
,因为它很容易使用,允许我将输入保存到变量中,并使代码等待输入

现在我希望它看起来更好,所以我用一个漂亮的聊天框在上面创建了自己的输入字段。 我想知道的是,在用户按下enter键之前,如何停止代码的执行(我已经检测到enter键,并且文本被追加到对话框中,我只需要代码等待它发生,然后再继续)

以下是我的一些代码:

输入函数

function input_field() {
    var inputField = $('#dialog-input');
    var messageField = $('#dialog-text');

    inputField.keyup(function (e) {
        if (e.keyCode == 13) {
            window.userInput = inputField.val();
            if(userInput != '') {
                messageField.append('You: ' + window.userInput + '<br>');
                inputField.val('');
                messageField.scrollTop(999999999);
            }
        }
    });
}
函数输入_字段(){
var inputField=$(“#对话框输入”);
var messageField=$(“#对话框文本”);
inputField.keyup(函数(e){
如果(e.keyCode==13){
window.userInput=inputField.val();
如果(用户输入!=''){
messageField.append('You:'+window.userInput+'
'); inputField.val(“”); messageField.scrollpop(999999999); } } }); }

我想做的是将数据保存到一个变量中,然后用开关盒检查它,就像使用
提示符()
,但现在它只会给我一个错误,因为它会尝试执行所有代码,而不是等到用户给出输入为止。

你必须换一种方式,当javascript在使用prompt()时停止并等待返回值时,您无法通过自定义提示直接实现这一点

var result = [];
for(var i = 0; i > 5; i--){
    result.push( prompt('tip something') ); // Ok
};
javascript将中断,直到提示符返回内容


但是你不能告诉你的代码停止,就像浏览器在提示时所做的那样。关闭打开/更新下一个模式的模式(单击按钮或按enter键)时,您必须执行一个代码。

使用asynch+Wait是可能的

请注意,目前并非所有浏览器都完全支持它(),而且可能有更好的解决此类问题的方法

使用
await myAsyncFunction()
会使浏览器将函数视为同步函数,因此它会停止进一步执行此函数,直到等待的函数返回结果为止。它不会阻止网站上的其他代码运行

wait
只能在
异步函数中使用,否则浏览器将抛出错误

下面是一个示例,演示如何使用wait+async等待用户输入:

异步函数handleForm(){
让userInput='';
log('在获取用户输入之前:',userInput);
userInput=等待getUserInput();
log('获取用户输入后:',userInput);
};
函数getUserInput(){
返回新承诺((解决、拒绝)=>{
$('#myInput').keydown(函数(e){
如果(e.keyCode==13){
常量inputVal=$(this.val();
解析(inputVal);
}
});
});
};
手形()


你能提供一个jsFiddle吗?@KopaxJackHerrauer Nope:/,这需要太多的其他代码,但问题与此无关。我只需要一种在javascript中等待用户输入的方法。我正在编写一个简单的示例,请稍等片刻。如果不使用诸如
prompt()
alert()
之类的内置函数,在继续执行javascript之前,您不能“等待用户输入”。Javascript根本不是这样工作的。解决此问题的通常方法是禁用页面上的其他UI,设置对话框,然后响应事件以确定或取消,并根据其中一个事件调用其余代码。我不明白此代码应该做什么。它仍然使用提示?这是一个自定义提示,请在html页面中尝试。我正在更新我的回答OK,但我不需要自定义提示。我有一个输入字段和对话框,我需要一些函数来询问用户一个问题,等待用户的响应,然后像往常一样继续编写代码。这个自定义提示不像普通提示那样等待输入。我给你一个答案,你不能像浏览器那样实现,我给你一个自定义提示。请参阅@jfriend00 response,如果不告诉他停止,你就无法停止脚本,打开提示必须停止脚本,然后关闭它重新开始,如果你需要更多解释,请询问。我没有投票否决你,但感谢你这么“友好”。您的自定义提示与我请求的帮助完全不同。您为什么要编写const test=await 20?20可以是其他数字吗?@Yolomep我不知道最初为什么这么做,可能是在尝试它是否有效。这绝对不是必需的,也没有任何好处,所以我只是从代码段中删除了这一行。