JavaScript测验重定向问题

时间:2016-07-20 19:01:08

标签: javascript redirect

我正在尝试对测验进行编码,该测验将根据所选答案重定向到两个辅助测验中的一个。我有下面的代码,我认为可以工作,但它要么完成else返回或重新加载测验。次要测验位于ques2.html内,第三次测验位于ques3.html内。有没有人有任何想法,我做错了,或有任何潜在的解决方案?

var data = {
    questions: [{
            question: "Which interests you most?",
            options: [ "Medicine" , "Physics" ]
        }, {
            question: "Which interests you most?",
            options: [ "Vet/Animals" , "Astrology"]
        }, {
            question: "Which interests you most?",
            options: [ "Nutrition" , "Chemistry"]
        }, {
            question: "Which interests you most?",
            options: [ "Psychology" , "Forensic Science" ]
        }, {
            question: "Which interests you most",
            options: [ "Dentistry" , "Biology"]

        }],

};

var qIndex = 0,
    index = 0,
    aString = "",
    maxQ = 5,
    q = document.getElementById('ques'),
    opt1 = document.getElementById('opt1'),
    opt2 = document.getElementById('opt2');

function generate(){
    q.innerHTML= data.questions[qIndex].question;
    opt1.value= data.questions[qIndex].options[0];
    opt2.value= data.questions[qIndex].options[1];
}

function optionClick(ans) {
    if(qIndex%1==0){
        aString+=ans;
        index++;
    }
    qIndex++;
    if(qIndex == maxQ){

        redirect( generateResult );
    } else{
        generate();
    }
}

function generateResult(answers) {
    if( answers =="00000" || answers =="00001" || answers=="00010" || answers=="00100" || answers=="01000" || answers=="10000" || answers=="00011" || answers=="00110" || answers=="01100" || answers=="11000" || answers=="00101" || answers=="01010" || answers=="10100" || answers=="01001" || answers=="10010" || answers=="10001" ) return "ques2.html";
    else if( answers=="11111" || answers=="11110" || answers=="11101" || answers=="11011" || answers=="10111" || answers=="01111" || answers=="11100" || answers=="11001" || answers=="10011" || answers=="00111" || answers=="11010" || answers=="10101" || answers=="01011" || answers=="10110" || answers=="01101" || answers=="01110" ) return "ques3.html";
    else return "new.html"; 
}


function redirect(url) {
    window.location = url;
}

2 个答案:

答案 0 :(得分:1)

当你调用你的重定向函数时,你必须使用这样的属性传递generateResult:

 redirect( generateResult(anwsers) );

答案 1 :(得分:0)

在您在问题中发布的代码中,您可以

redirect( generateResult );

...但是在这里,generateResult是对函数的引用,它不是调用函数,所以你将javascript函数传递给redirect(...),你是传递网址。

要调用该函数,您需要括号

redirect( generateResult() );

- 但是,然后,generateResult正在期待参数answers,正如我们在其声明中看到的那样 - 因此,您需要在{{1}中传递您正在构建的字符串aString功能

optionClick(ans)

另外,我不确定你在optionClick ...

中尝试用这个测试做什么
redirect( generateResult(aString) );

...但是function optionClick(ans) { if(qIndex%1==0){ aString+=ans; index++; } 总是留下零余数,因此N % 1始终为真,并且始终执行这两行。
显然使用了qIndex%1==0,但看起来qIndex不是,可以删除。

在任何情况下,我都创建了a fiddle,其中我已经删除了与页面交互的函数(因为你没有显示任何html),只是写入浏览器控制台。它模拟按顺序点击选项:0,1,0,0,0并正确输出它将转到页面index

根据我上面所写的内容,update to the fiddle删除不必要的部分,并显示不同的序列:0,1,1,0,1,输出ques2.html。< / p>