2

我已经从 JsPsych 修改了一个调查多选插件,以便以复选框而不是单选按钮的形式获得响应,因为我需要向用户呈现图像,然后是 4 个备选方案,如下所示:

在此处输入图像描述

其中 A、B、C 和 D 也是图像,每个图像下方都有各自的复选框。此结构必须多次呈现,如下所示:

在此处输入图像描述

所以在这个例子中,预期的输出是:

 {"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"));
  }
} 

可以在此处找到我的完整代码的工作示例,供您对其进行测试(查找jspsych-survey-multi-choicemrbeta.js文件,从第 141 行开始)。CSS 不包括在内,因此看起来会略有不同。

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

谢谢你的帮助。

4

1 回答 1

1

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

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

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

对此:

$(this).find("input:checkbox:checked").each( ...
于 2016-08-18T14:08:16.853 回答