根据变量JavaScript转到某处

时间:2017-09-25 19:42:23

标签: javascript html variables goto

好吧所以我对整个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;
<button onclick="q1()">test</button>

P.S。任何帮助我学习JS的好网站都很受欢迎,所以我不必在将来问这个问题(可能真的很愚蠢)

2 个答案:

答案 0 :(得分:0)

我不想教你,去代码学院,但如果你至少&#34;不知道&#34;如何实现可以按照你想要的方式工作的东西,我可以告诉你如何做一些在某种程度上工作的方法。听:

您可以声明执行您的问题(让我们称之为&#34;转到目标&#34;)为:

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 /模块中,并使用更多的html / angular / react来保持这种组织。

答案 1 :(得分:0)

我知道你还在学习,但你不应该使用标签来做到这一点。以下是实现此目标的更简单方法。

(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,那么我们在索引中加一,加上true或false,无论答案是否为y。如果是n,则有条件地将索引增加1,如果是y则增加2。然后检查计算的索引是否存在问题。如果是,则触发问题的警报,或者如果不警告没有其他问题并将索引重置为-1。