2016-07-20 3 views
0

Я пытаюсь закодировать викторину, которая будет перенаправляться на один из двух вторичных викторин в зависимости от выбранных ответов. У меня есть код ниже, который, как я думал, будет работать, но вместо этого он либо завершает else, либо перезагружает викторину. Вторичная викторина находится в ques2.html, а третья - в ques3.html. У кого-нибудь есть идеи, что я делаю неправильно, или у вас есть потенциальные решения?Проблема с перенаправлением JavaScript quiz

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

Где (и как) используется ваш «обработчик кликов»? Щелчок (ans) вызывается? Вы пытались перенаправить (generateResult (aString))? Сделайте console.log (aString) внутри optionClick ... – Lemonade

ответ

1

При вызове вашей функции переадресации вы должны передать его generateResult с СВОЙСТВАМИ, как это:

redirect(generateResult(anwsers)); 
+0

Я не совсем уверен, что вы хотите сделать с этим, можете ли вы предоставить мне пример, пожалуйста? – Akamaru

0

В коде вы публикуемый в вашем вопросе, вы

redirect(generateResult); 

... но здесь generateResult является ссылкой на функцию, это не , вызывающая функцию, поэтому вы передаете функцию javascript на redirect(...), вы не, пропуская URL.

Для вызова функции вам нужны круглые скобки

redirect(generateResult()); 

- но тогда, generateResult ожидает параметр answers, как мы видим, в своей декларации - значит, вам нужно передать строку, которую вы накапливались , aString в вашей optionClick(ans) функции

redirect(generateResult(aString)); 

Кроме того, я не уверен, что вы пытаетесь сделать с этим тестом в optionClick ...

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

... но ничего N % 1 всегда оставляет остаток от нуля, поэтому qIndex%1==0 всегда истинно, и эти две строки всегда выполняются.
Используется qIndex, но похоже, что index нет, и его можно удалить.

В любом случае, я создал a fiddle, где я отключил функции, которые взаимодействуют со страницей (поскольку вы не показываете какой-либо html) и просто записываете в консоль браузера. Он имитирует, нажав на опции по порядку: 0, 1, 0, 0, 0 и правильно выводит, что он перейдет на страницу ques2.html.

update to the fiddle вырезает части, которые не нужны, в зависимости от того, что я написал выше, и показывает другую последовательность: 0,1,1,0,1, которая выводит ques3.html.

+0

У меня вначале было это внутри, а затем было изменено, чтобы увидеть, что-то изменилось. У меня все еще такая же проблема. Он либо загружает else, либо перезагружает new.html, либо перезагружает страницу – Akamaru

Смежные вопросы