JavaScript-多次调用click函数将不起作用

JavaScript-多次调用click函数将不起作用,javascript,jquery,Javascript,Jquery,我正在制作一个文本冒险游戏,它需要用户以html元素的形式输入,并使用单击功能将用户输入发送到JavaScript: <!-- HTML CODE --> <div class="game"> <div id="gamebox"> <a name="game"></a> <!-- Javascript writes to here (if it works :( ) --> &

我正在制作一个文本冒险游戏,它需要用户以html元素的形式输入,并使用单击功能将用户输入发送到JavaScript:

<!-- HTML CODE -->
<div class="game">
    <div id="gamebox">
        <a name="game"></a>
        <!-- Javascript writes to here (if it works :( ) -->
    </div>
    <div id="inputbox">
        <input type="text" id="userinput" placeholder="Input" value="" />
        <a href="#game" id="btn-quest" class="button" style="float: right">Go!</a>
    </div>
</div>
我想定义另外两个函数,它允许我写入。我会比其他功能,这是文本冒险游戏的故事情节。然而,问题的根源在于我似乎无法通过第二个事件。以下是我的活动:

function wakeUp() {
  displayGame("You wake up, at stackoverflow. West or east? [Choose 'west' or 'east']");
  btn_quest.on({
    "click": function() {
      // Begin input preproccessing
      var input = txt_input.val().toLowerCase();
      // If/else block for choice here
      if (input === "west") {
        //Paste btn_quest here for new event
        goWest();
      } else if (input === "east") {
        //Paste btn_quest here for new event
        goEast();
      } else {
        //Error handler - do not modify
        txt_input.val("Error - enter a valid choice");
      }
    //End of if else block body
    }
  });
第一个事件函数将完美地工作,并写入我的html,并接受第一个用户选择。但是,在下一个事件中,无论是(goEast()还是goWest()),我的程序总是显示“Error-enter a valid choice”)。现在,我的假设是“开关”功能不能正常工作。然而,我真的不知道。这里的问题是什么,如何解决?其他事件函数(etc goEast)与唤醒函数完全相同,只是具有不同的displayGame()字符串和指向其他事件函数的链接

为了保持代码简短,我没有包含完整的代码-但如果需要,这里是完整的html/css/javascript:

编辑:我试图实现这个建议,如下所示:但JavaScript似乎不再获得用户输入。当我试图提交用户的响应时,什么都没有发生。出了什么问题?我在游戏中的所有功能都做了同样的事情:

function wakeUp() {
  displayGame("You wake up at stackoverflow again, but it didn't work. Go West or east again?");
  // btn_quest.off("click").on("click",function()){
  btn_quest.off("click").on;
    "click", function() {
      // Begin input preproccessing
      var input = txt_input.val().toLowerCase();
      // If/else block for choice here
      if (input === "walk") {
        //Paste btn_quest here for new event
        walkToWork();
      } else if (input === "bus") {
        //Paste btn_quest here for new event
        busToWork();
      } else {
        //Error handler - do not modify
        txt_input.val("Error - enter a valid choice");
      }
    //End of if else block body
  };
  //End of function. Copy until line under this comment V
}

我做错了什么?您可以展示一个使用此函数的示例吗?

您需要查看所有代码才能看到问题所在。原因是您一直绑定到元素,因此会触发多个单击事件。您需要删除最后一次单击

btn_quest.off("click").on("click",function(){});

六羟甲基三聚氰胺六甲醚。。。第一件事不是东进还是西进?或者您是否正在考虑
wakeUp
事件如果
goEast
goWest
wakeUp
完全相同,这是否意味着它们也会将一个点击事件绑定到同一个按钮,从而导致多个点击事件?我不明白,但可以。它们都绑定到html上的同一个按钮,当输入发送到javascript时,页面不会刷新。还有,是的,第一个函数应该是goingeastrwest()-我只是忘记了更改原始函数的名称,在原始函数中,主角色会被唤醒。我删除了我的大部分代码,因此它很简短,切中要害,我可以将它们发布到stackoverflow上。我对编程相当陌生,所以让我告诉你我的理解:基本上,按钮就像一个开关,打开后,我必须再次关闭它,然后再尝试打开它。对吗?另外,插入btn_quest.off的最佳位置是什么?就在wakeUp()函数中的displayGame()函数之后?而且,我似乎不知道btn_quest.off在代码中的位置。你能用我的wakeUp()函数做个例子,告诉我应该在代码中把btn_quest.off放在哪里吗?哦,我想我明白了。所以,它基本上是告诉程序打开它,执行函数中的东西,然后关闭它,对吗?它与打开和关闭无关。将“开”视为“添加”,将“关”视为“删除”。您正在添加多个内容。将调用第一次单击,然后调用第二次单击。因此,第一次单击仍在查找bus/walk,因此是错误的。既然已经做完了,你就得把它扔掉。所以你把它移除。要删除它,请取消()。off将删除应用于该元素的所有事件。所以,让我澄清一下。这就像派人去买面包。他去那里,给你买面包回来。然后,你派另一个人去买牛奶。但是那个卖面包的人又回去买面包了,带着面包回来了,而另一个人正在买牛奶。所以我有一个错误。对的
btn_quest.off("click").on("click",function(){});