使用嵌套的 .each() 函数存储数据会导致复制值
Storing data with nested .each() function causes to replicate values
我已经修改了 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"));
}
}
我的完整代码的工作示例可以在 here 中找到,供您测试(查找 jspsych-survey-multi-choicemrbeta.js
文件,从第 141 行开始)。 CSS 未包含在内,因此看起来会略有不同。
请注意,此代码的输出是一个 CSV 文件,并且在单个单元格中给出了完整的回答集,因为所有这些问题都属于同一个 JsPsych "trial".
感谢您的帮助。
内部循环遍历 所有 个复选框,而不仅仅是属于问题的复选框。
假设复选框是相关问题 div
的后代,您应该将内部循环更改为:
$("input:checkbox:checked").each( ...
对此:
$(this).find("input:checkbox:checked").each( ...
我已经修改了 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"));
}
}
我的完整代码的工作示例可以在 here 中找到,供您测试(查找 jspsych-survey-multi-choicemrbeta.js
文件,从第 141 行开始)。 CSS 未包含在内,因此看起来会略有不同。
请注意,此代码的输出是一个 CSV 文件,并且在单个单元格中给出了完整的回答集,因为所有这些问题都属于同一个 JsPsych "trial".
感谢您的帮助。
内部循环遍历 所有 个复选框,而不仅仅是属于问题的复选框。
假设复选框是相关问题 div
的后代,您应该将内部循环更改为:
$("input:checkbox:checked").each( ...
对此:
$(this).find("input:checkbox:checked").each( ...