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