Javascript - 等待用户输入(回调)

时间:2017-11-22 22:41:46

标签: javascript jquery html

我一直在寻找其他问题试图了解回调,但我只是无法理解它在我的背景下使用。我正在编写一个使用纯文本输入的基于文本的游戏。在需要时,我希望游戏能够提出不同答案的问题,然后等待,直到给出有效的答案。下面是一个不起作用的例子,但解释了我试图做的事情。任何人都可以向我提供任何指导吗?感谢。



//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?
    }
  });
});
&#13;
<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>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

看起来好像你错误地考虑了这些功能。

功能是:

  • 可以在调用数据时返回数据的一系列步骤。您 通过将参数传递给函数名来调用函数,即使 争论不算() - a.e. alert(string)myFunction()
  • 除了他们自己之外别无他物。在您的代码中,您prompt == "1"这不会起作用。 prompt是一个函数名称,它不会被调用,因此您实际上将函数本身与字符串&#34; 1&#34;进行比较。
  • 能够在调用时返回数据。这些数据可以进行比较。

注意:另外,非常重要的是,prompt是默认功能的名称(如alertconsole),您不应该覆盖它。它不被语言视为保留关键字,但如果您正在使用任何其他库,或者任何其他程序员都不知道它,那么更改它将导致havok&#39被覆盖了,并试图调用它。

&#13;
&#13;
prompt("this is a normal prompt");
&#13;
&#13;
&#13;

此外,您可以使用文档设置来检查keypress上文本框本身的值。您应该可能将此更改为文本框中的事件侦听器,但是没有任何理由在等待框匹配某些预定义输入时连续循环一个函数。

流程就是这样:

  • 在框中输入
  • 点击进入
  • 检查值
  • 如果值 1 2 3 任何其他可接受的答案执行某事< / em>的

如果您目前只需要这些,那么当单个事件监听器可以解决问题时,您不需要为功能而努力工作:

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

&#13;
&#13;
$("#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("");
  }
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="input_box">
&#13;
&#13;
&#13;