簡體   English   中英

Javascript/JQuery 等待用戶輸入

[英]Javascript/JQuery wait for user input

我正在開發使用 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);
            }
        }
    });
}

我想要做的就是將數據保存到一個變量中,然后像使用prompt()一樣使用 switch-case 對其進行檢查,但就目前而言,它只會給我一個錯誤,因為它試圖執行所有代碼而不是等到用戶給出輸入。

異步+等待是可能的。

請注意,目前並非所有瀏覽器( http://caniuse.com/#search=await )都完全支持它,並且可能有更好的解決方案來解決此類問題。

使用await myAsyncFunction()使瀏覽器將函數視為同步,因此它停止進一步執行此函數,直到等待的函數返回結果。 它不會阻止網站上的其他代碼運行。

await只能在async function ,否則瀏覽器會拋出錯誤。

這是一個示例,顯示如何使用 await+async 等待用戶輸入:

 async function handleForm() { let userInput = ''; console.log('Before getting the user input: ', userInput); userInput = await getUserInput(); console.log('After getting user input: ', userInput); }; function getUserInput() { return new Promise((resolve, reject) => { $('#myInput').keydown(function(e) { if (e.keyCode == 13) { const inputVal = $(this).val(); resolve(inputVal); } }); }); }; handleForm();
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <input id="myInput">

您必須采取不同的方式,而 javascript 在使用 prompt() 時會停止並等待返回值,但您無法使用自定義提示直接實現這一點。

var result = [];
for(var i = 0; i > 5; i--){
    result.push( prompt('tip something') ); // Ok
};

javascript 將中斷,直到提示返回某些內容

但是你不能告訴你的代碼停止,就像瀏覽器在提示時所做的那樣。 在關閉打開/更新下一個模式的模式(單擊按鈕或按鍵時)時,您必須執行代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM