2016-08-18 93 views
2

我已經從JsPsych修改了一個調查 - 多選擇插件,以便以複選框的形式獲取響應,而不是單選按鈕,因爲我需要到的圖像呈現給用戶,隨後4層的替代方案,這樣的:使用嵌套.each()函數存儲數據導致重複值

enter image description here

其中A,B,C和d也圖像,與各一低於它們各自的複選框。這種結構必須出示不止一次,像這樣:

enter image description here

所以在這個例子中,預計產量將是:

{"Q0":["Option A","Option B"]} //this is the first "question" displayed 
{"Q1":["Option B","Option C"]} //second one 
{"Q2":["Option B","Option D"]} //third one 

而是我得到複製爲其他人第一個答案的問題:

:下面提供

{"Q0":["Option A","Option B"]} //this is the first "question" displayed 
{"Q1":["Option A","Option B"]} //second one 
{"Q2":["Option A","Option B"]} //third one 

我的代碼

$("div." + plugin_id_name + "-question").each(function(index) { 
    var id = "Q" + index; 
    var val = []; 
    var a = $(".jspsych-survey-multi-choicemrbeta-option"); 

    $("input:checkbox:checked").each(function(){   
     val.push($(this).attr("value")); 
    }); 

    var obje = {}; 
    obje[id] = val; 
    $.extend(question_data, obje); 

    }); 

我試着通過在控制檯上打印它們來追蹤每一步生成的值,所以我猜測問題是我如何實現這些嵌套循環,因此這個問題的名稱。

我試圖實現這種循環時,不同的方法,沒有更好的結果:

for (var j = 0; j < trial.options[index].length; j++) { 
    if ($('jspsych-survey-multi-choicemrbeta-response-' + j).is(':checked')) { 
    val.push($(this).attr("value")); 
    } 
} 

我完整的代碼工作示例可以發現here,爲您測試(尋找jspsych-survey-multi-choicemrbeta.js文件,來自#141行)。 CSS不包括在內,所以看起來會略有不同。

請注意,此代碼的輸出是一個CSV文件,並且在單個單元格上給出了完整的響應集,因爲所有這些問題都屬於相同的JsPsych「試用版」。

感謝您的幫助。

回答

1

內循環遍歷全部複選框,不僅是屬於該問題的複選框。

假設複選框對於有關的問題div的後代,你應該改變,從這個內環:

$("input:checkbox:checked").each(... 

這樣:

$(this).find("input:checkbox:checked").each(... 
+0

我原本以爲加入一些間隔條件將是關鍵。我實際上已經嘗試在主循環結束時返回false,儘管它起作用,它將所有內容都存儲在第一個問題(Q0)數據集中。正如您正確指出的那樣,對後代項目進行適當的迭代就是實際的解決方案。與我所嘗試的不同,你的回答完美無缺,非常感謝你。 –

相關問題