2016-10-26 14 views
0

我已經構建了一個選擇題測驗。一些答案有廣播框,其他答案有複選框,因爲有多個正確的答案。我以前使用過一個腳本來獲取所有選中的輸入的id,並將它們放入一個數組中以發送給服務器進行評估。如何通過收音機/複選框輸入循環,並將選定的人的ID推入陣列

數組是這樣的:

userAnswers = [ '1c', '2d', '3a', '3b', '3c', '3d', '4b', '5c', '5d', '6d' ] 

我已經成功地通過所有的很容易循環:檢查輸入,並添加自己的HTML的id到一個數組,但我需要改變我的數據結構,評估服務器上的答案更容易。

我試圖將數據結構更改爲以下:

answers = [ 
    ['c'], // Question 1 answers 
    ['d'], // Question 2 answers 
    ['a', 'b', 'c', 'd'], // 3 
    ['b'], // 4 
    ['c', 'd'], // 5 
    ['d'], // 6 
] 

要做到這一點,我試圖創建一個循環,查找所有:檢查輸入的基礎上他們的[數據question- number]值,然後將它們的html ID添加到數組中,然後將該數組添加到上面的數組中。

到目前爲止,我已經得到了最接近的是以下幾點:

let numberOfQuestions = Assessments.findOne().numQuestions; //returns the number of questions in the quiz e.g '25' 
let selectedAnswers = []; 

for(let i = 1; i <= numberOfQuestions; i++) { 
    let answers = $("input[data-question-number=" + i + "]:checked").attr('id'); 
} 

這幾乎工作,但問題是,.attr()只返回第一個匹配的屬性,所以在我的一些問題,其中有4個複選框,用戶可能已經檢查了其中的3個,我只會將第一個複選框返回給我。

如果有人能夠幫助我mofidy這樣它會插入所有的檢查輸入,這將是非常棒的。謝謝!

回答

2
let answers = [] 
for(let i = 1; i <= numberOfQuestions; i++) { 
    let temp = [] 
    $("input[data-question-number=" + i + "]:checked").each(function() { 
     temp.push(this.id) 
    }); 
    answers.push(temp) 
} 
+0

真棒,這完美的作品。 謝謝! – Sean

1

您將不得不循環遍歷結果元素以逐個獲取id。

for(let i = 1; i <= numberOfQuestions; i++) { 
    let answers = [] 
    $("input[data-question-number=" + i + "]:checked").each(function() { 
     answers.push(this.id) 
    }); 
} 
+0

謝謝,這一定幫助,但我接受了100%的回答解決了這個問題。非常感謝,雖然 – Sean

相關問題