JS - 如何在另一个开关启动时停止执行第一个开关?

时间:2016-11-16 16:02:26

标签: javascript jquery

我开始制作文字游戏,基本思路是:  当游戏开始时,用户必须将他的选择输入到输入字段中。他输入的文本与函数内的开关交互,如果用户输入"右命令",则调用另一个可能包含另一个开关的功能,依此类推。    我在这段代码中有一个错误:  第一个功能内部的开关运行良好,当它的第一个案例(case" yes")调用另一个函数时,一切都开始正常工作。但是当用户输入应该与第二个功能的开关交互的文本时,他实际上仍然与第一个功能的开关(以及第二个功能的开关)进行交互。  有人愿意帮助我解决它,甚至指出我正确的方向吗?



var startGame = function(){
    showText("Welcome to the virtual pseudo-reality")
    showText("Are you ready to start your journey?")
    $('#btn').click(function(e) {
      e.preventDefault();
        switch ($('input[name=myInput]').val().toLowerCase()) {
            case "yes": showText("- "+$('input[name=myInput]').val());
                showText("Welcome aboard!");
                    selectChar();
            break;
            case "no": showText("- "+$('input[name=myInput]').val());
                showText("Your choise is no.");
            break;
            default:
                showText("- "+$('input[name=myInput]').val());
                showText("Sorry, wrong input.") ;
            break;
        };
      $('input[name=myInput]').val('');
      var element = document.getElementById("storyBoard");
        element.scrollTop = element.scrollHeight;
        });
    };
//A first in-game function, needs to select the character that user want to be:
var selectChar = function(){
    showText("<br>"+"Choose who you are, you have to choose one of two heroes: Phantomorph and Disogr.");
    $('#btn').click(function(e) {
      e.preventDefault();
        switch ($('input[name=myInput]').val().toLowerCase()) {
            case "phantomorph": showText("- "+$('input[name=myInput]').val());
                showText("You choosed Phantomorph.");
                    user = phantomorph; friend = disogr;
            break;
            case "disogr": showText("- "+$('input[name=myInput]').val());
                showText("You choosed Disogr.");
                    user = disogr; friend = phantomorph;
            break;
            default: alert("You need to make a right choose.");
                selectChar();
            break;
        };
      $('input[name=myInput]').val('');
      var element = document.getElementById("storyBoard");
    element.scrollTop = element.scrollHeight;
        });
    };

startGame();
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:1)

您正在将多个事件绑定到同一个输入,以便当用户第二次单击两个事件处理程序回调时执行。

由于您使用的是jQuery,我会从使用.click切换到.on('click',然后在绑定第二个点击处理程序的切换案例中,您可以使用.off('click'删除初始处理程序。

最好还是有一个变量来跟踪你的游戏状态,并将第二个事件处理程序的绑定移出开关案例。您需要这样做,否则每次用户点击都会重新绑定点击处理程序。

[编辑]

你可以一次添加任意数量的事件处理程序,只要DOM元素准备就绪(在jQuery文档就绪回调中),或只绑定一个click事件并在事件处理程序中包含逻辑来检查你的数据&# 39;已经从用户处捕获以触发任意行为。

我建议您创建一个click处理程序,并在回调中检查user变量的值,以查看用户是否已为其设置了值。 (您只需要确保您的点击处理程序可以访问该变量的范围,以及您的应用程序中需要它的任何部分,目前在您的示例中没有var user;