2016-10-26 3 views
0

私は複数の選択肢のクイズを作成しました。いくつかの回答にはラジオボックスがあり、他には複数の正解があるためチェックボックスがあります。私はこれまで、チェックされたすべての入力のIDを取得するためにスクリプトを使用し、評価のためにサーバーに送信するために配列に入れました。入力をチェックし、配列にそのhtmlのIDを追加しますが、私はそう私のデータ構造を変更する必要があります。私はすべてを通して非常に簡単にループするために管理してきましたラジオ/チェックボックス入力をループし、選択したIDの配列を配列にプッシュする方法

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

配列は、このように見えましたサーバー上の回答を評価する方が簡単です。

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

これを行うには、私はすべての見つかったループを作成しようとしている:私は次のようにデータ構造を変更しようとしている

は、彼らの[データquestion-に基づいて入力をチェックしますその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することができれば、すべてのIDをチェックインしてくれます。ありがとう!

答えて

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を1つずつ取得するために、結果の要素をループする必要があります。

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

おかげで、この間違いなく助けたが、私は100%を受け入れた答えは、問題を解決しました。かなり高く評価されています – Sean

関連する問題