簡體   English   中英

Javascript-等待用戶輸入(回調)

[英]Javascript - Waiting for user input (callbacks)

我一直在尋找其他問題,以設法避開回調,但我對它的理解不足以在上下文中使用。 我正在寫一個使用純文本輸入的基於文本的游戲。 在需要時,我希望游戲問一個帶有不同答案的問題,然后等到給出有效答案為止。 下面是一個不起作用的示例,但解釋了我正在嘗試執行的操作。 誰能為我提供任何指導? 謝謝。

 //main code pEQUIP = ["foo", "foo", "foo"]; exItem = "ball"; function prompt(numPrompts, callback) { //waits until user types a number <= numPrompts and presses enter, then returns the valid result entered } $('#gametext').append("<p>" + "What slot would you like to use to hold this item?" + "</p>"); //where a function would be stopping the code until a valid answer is given if (prompt == "1") { pEQUIP[0] = exItem; } else if (prompt == "2") { pEQUIP[1] = exItem; } else if (prompt == "3") { pEQUIP[2] = exItem; } //Just a quick n dirty way of testing it worked below: $('#gametext').append("<p>" + pEQUIP[0] + pEQUIP[1] + pEQUIP[2] + "</p>"); //parses user info unsure if this could be used or would have to be copied $(document).ready(function() { $(document).keypress(function(key) { if (key.which === 13 && $('#userinput').is(':focus')) { var value = $('#userinput').val().toLowerCase(); $('#userinput').val(""); //playerInput(value); Is usually here, would lead to //a switch which parses commands typed by the user. //Unsure if it can be used for this problem as pausing //the code I think would stop the switch? } }); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <body> <div id="gametext"></div> <input id="userinput"> </body> 

似乎您在錯誤地考慮功能。

功能是:

  • 調用它們時可能返回數據的一系列步驟。 您可以通過將參數傳遞給函數名稱來調用函數,即使參數不為() -ae alert(string)myFunction()
  • 除了自己,別無其他。 在您的代碼中,您有prompt == "1"這將行不通。 prompt是一個函數名,不會被調用,因此您實際上是將函數本身與字符串“ 1”進行比較。
  • 能夠在調用時返回數據。 該數據可以進行比較。

注意:同樣,非常重要的是, prompt是默認函數的名稱(例如alertconsole ),您不應覆蓋它。 它不是該語言所認為的保留關鍵字,但是如果您正在使用任何其他庫,或者任何其他程序員都不知道它已被覆蓋並嘗試調用它,則對其進行更改將導致havok。

 prompt("this is a normal prompt"); 

此外,您還具有文檔設置,可以在keypress檢查文本框本身的值。 可能應該將其更改為文本框上的事件偵聽器,但是在等待框與某些預定義輸入匹配時,沒有任何理由繼續循環超出此范圍的函數。

流程是這樣的:

  • 在方塊中輸入
  • 點擊進入
  • 檢查值
  • 如果值是123任何其他可接受的答案,請執行某些操作

如果這是您當前所需的全部,那么當單個事件偵聽器可以解決問題時,您就無需為該功能而辛苦工作:

$("#input_box").on("keypress", function(e) {
  if(e.keyCode === 13) {
    let value = $("#input_box").val();
    if(value === "1" || value === "2" || value === "3") {
        //do whatever
    }
  }
});

 $("#input_box").on("keypress", function(e) { if(e.keyCode === 13) { let value = $("#input_box").val(); if(value === "1" || value === "2" || value === "3") { console.log("accepted"); } $("#input_box").val(""); } }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <input type="text" id="input_box"> 

暫無
暫無

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

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