【问题标题】:Goto somewhere based on a variable, JavaScript基于变量 JavaScript 转到某个地方
【发布时间】:2017-09-25 19:42:22
【问题描述】:

好的,所以我对整个 JavaScript 有点陌生,但我只是在尝试一些东西
某种是/否测验的东西,我想跳过某些问题和东西

我来了加上以下但整个“继续Q + question_nr;”不像我希望的那样工作。我该怎么做? :)

var question_nr = 1;

Q1:
function q1() {
    var a1 = prompt("Wanna skip the next question?", "y/n");
switch(a1) {
    case "y":
        alert("k");
        question_nr = question_nr + 2;
        continue Q + question_nr;
        break;
    case "n":
        alert("oki");
        question_nr = question_nr + 1;
        break;
    default:
        alert("please enter y or n.");
        break;
	}	
}

Q2:
alert("test2");
//<insert question 2>
break;

Q3:
alert("test3");
//<insert question 3>
break;
&lt;button onclick="q1()"&gt;test&lt;/button&gt;

附言任何可以帮助我学习 JS 的好网站都会受到赞赏,所以我以后不必问(可能真的很愚蠢)这样的问题

【问题讨论】:

  • w3schools.com/js 是开始使用 javascript 的好地方
  • 它应该如何工作:) 这些是一些很好的免费交互式学习网站,非常适合学习基础知识(您可以付费学习更高级的内容)。 codecademy.comkhanacademy.org/cs。一旦你掌握了这些基础课程,我会建议你看书。 w3schools 也不错。
  • @WizardCoder 根据变量 question_nr 的值,它应该喜欢转到 Q2、Q3、Q4、Q5 等。

标签: javascript html variables goto


【解决方案1】:

我不想教你,去代码学院,但如果你至少“不知道”如何实现你想要的东西,我可以告诉你如何做一些以某种方式工作的东西靠近 goto 的工作方式。听:

您可以将问题的执行(我们称之为“goto 目标”)声明为:

const QUESTIONS = {
  Q1: function () {
    someLogicThere();
  },
  Q2: function () {
    someLogicThere();
  }
};

并以这样的方式执行它(如果您没有定义任何必需的问题,这将引发错误):

switch(lastPrompt) {
    case "y":
        alert("k");
        question_nr = question_nr + 2;
        QUESTIONS["Q" + question_nr]();
        break;
    case "n":
        alert("oki");
        question_nr = question_nr + 1;
        break;
    default:
        alert("please enter y or n.");
        break;
    }   
}

但我认为这是一个糟糕的代码。您应该将所有内容都包装在 IIFE/module 中,并使用更多的 html/angular/react 来保持井井有条。

【讨论】:

    【解决方案2】:

    我了解您仍在学习,但您不应该使用标签来执行此操作。以下是实现此目标的更简单方法。

    (function () {
        var questions = [
            'How much wood can a wood chuck chuck?',
            'How many fish in the sea?',
            'How does this JavaScript work?'
        ];
        var index = -1;
        window.askQuestion = function () {
            var answer = prompt("Wanna skip the next question?", "y/n");
            if(answer === 'y' || answer === 'n') {
                index = (index + 1) + (answer === 'y');
                if(questions[index]) {
                    alert(questions[index]);
                } else {
                    alert("No more questions to ask.");
                    index = -1;
                }
            } else {
                alert("please enter y or n.");
            }
        };
    }());
    

    有几点需要注意。上面的函数将其代码包装在所谓的自执行匿名函数中。这使得在其中声明的变量位于私有范围内。接下来,我们将问题存储在数组中,同时记住数组索引始终从 0 开始。这就是为什么当我们声明索引变量时它从 -1 开始。如果用户给出的答案是 y 或 n,那么无论答案是否为 y,我们都将索引加 1 加上 true 或 false。这有条件地将索引增加 1 如果 n 或 2 如果 y。然后检查计算的索引处是否存在问题。如果是,则触发该问题的警报,或者如果没有发出没有更多问题的警报并将索引重置为 -1。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-26
      • 1970-01-01
      • 2018-09-15
      • 1970-01-01
      • 1970-01-01
      • 2013-03-05
      • 1970-01-01
      • 2018-08-19
      相关资源
      最近更新 更多