2016-08-18 67 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)数据集中。正如您正确指出的那样,对后代项目进行适当的迭代就是实际的解决方案。与我所尝试的不同,你的回答完美无缺,非常感谢你。 –

相关问题