我已经修改了JsPsych的Survey-multi-choice插件,以便以复选框而不是单选按钮的形式获取响应,因为我需要向用户展示图像,然后是4种选择,例如:

javascript - 使用嵌套的.each()函数存储数据会导致复制值-LMLPHP

其中A,B,C和D也是图像,其相应的复选框位于每个复选框下方。必须多次显示此结构,如下所示:

javascript - 使用嵌套的.each()函数存储数据会导致复制值-LMLPHP

因此,在此示例中,预期输出为:

 {"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中找到,供您进行测试(请从#141行查找jspsych-survey-multi-choicemrbeta.js文件)。不包含CSS,因此外观会略有不同。

请注意,此代码的输出是CSV文件,并且完整的响应集在单个单元格上给出,因为所有这些问题都属于同一JsPsych“试验”。

谢谢你的帮助。

最佳答案

内部循环遍历所有复选框,而不仅是属于问题的复选框。

假设复选框是相关问题的div的后代,则应从此更改内部循环:

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


对此:

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

09-25 20:12