我正在尝试对测验进行编码,该测验将根据所选答案重定向到两个辅助测验中的一个。我有下面的代码,我认为可以工作,但它要么完成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;
}
答案 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>