2016-07-20 31 views
0

我在嘗試編碼測驗,根據選擇的答案將重定向到兩個輔助測驗之一。我有下面的代碼,我認爲它會工作,但它或者完成其他返回或重新加載測驗。輔助測驗位於ques2.html內,第三個位於ques3.html內。有沒有人有任何想法我做錯了,或有任何潛在的解決方案?JavaScript測驗重定向問題

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

你的「click handler」選項在哪裏(以及如何)clickClick(ans)被調用? 你試過重定向(generateResult(aString))嗎? 在optionClick中製作一個console.log(aString)... – Lemonade

回答

1

當你打電話給你重定向功能,你必須通過它與這樣的propertie 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