我在Qualtrics调查中两次询问相同的矩阵表(多个答案)问题。当我第二次向用户显示问题时,我希望从用户第一次回答问题时自动填充答案。我查看了文档中的代码片段,因此我知道如何选择当前问题中的复选框,例如。
for (var i = 1; i <= rows; i++) {
for (var j = 1; j <= cols; j++) {
this.setChoiceValue(i, j, true);
}
}
我的问题是我无法弄清楚如何从上一个问题中获得所选答案。我尝试过类似的东西,但它不起作用(无法读取null的属性'attr'):
var isChecked = $("#QR~QID2~" + i + "~" + j").attr('checked');
This page from the documentation建议使用管道文字,类似于:
var selectedChoice = "${q://QID2/ChoiceGroup/SelectedChoices}";
这似乎为我提供了已选择的调查行中的唯一语句,但我需要为问题中的每个语句(行)获取所选答案(col)。我不确定如何制定正确的管道文本。
任何建议都将不胜感激!感谢。
编辑1:这是我最终使用的代码。
Qualtrics.SurveyEngine.addOnload(function()
{
/*Place Your Javascript Below This Line*/
var numChecks = $(this.getQuestionContainer()).select('input[type="checkbox"]');
var numCols = 4;
var numRows = numChecks.length / numCols;
var map = {};
//I won't have more than 20 rows in the matrix
map[1] = "${q://QID53/SelectedAnswerRecode/1}";
map[2] = "${q://QID53/SelectedAnswerRecode/2}";
map[3] = "${q://QID53/SelectedAnswerRecode/3}";
map[4] = "${q://QID53/SelectedAnswerRecode/4}";
map[5] = "${q://QID53/SelectedAnswerRecode/5}";
map[6] = "${q://QID53/SelectedAnswerRecode/6}";
map[7] = "${q://QID53/SelectedAnswerRecode/7}";
map[8] = "${q://QID53/SelectedAnswerRecode/8}";
map[9] = "${q://QID53/SelectedAnswerRecode/9}";
map[10] = "${q://QID53/SelectedAnswerRecode/10}";
map[11] = "${q://QID53/SelectedAnswerRecode/11}";
map[12] = "${q://QID53/SelectedAnswerRecode/12}";
map[13] = "${q://QID53/SelectedAnswerRecode/13}";
map[14] = "${q://QID53/SelectedAnswerRecode/14}";
map[15] = "${q://QID53/SelectedAnswerRecode/15}";
map[16] = "${q://QID53/SelectedAnswerRecode/16}";
map[17] = "${q://QID53/SelectedAnswerRecode/17}";
map[18] = "${q://QID53/SelectedAnswerRecode/18}";
map[19] = "${q://QID53/SelectedAnswerRecode/19}";
map[20] = "${q://QID53/SelectedAnswerRecode/20}";
for (var i = 1; i <= numRows; i++) {
//Get the recode values for row i
var rowValues = map[i].split(",");
//Loop through all the recode values for the current row
for (var c = 0 ; c < rowValues.length; c++) {
var val = parseInt(rowValues[c].trim());
//Select the current question's checkboxes corresponding to the recode values
this.setChoiceValue(i, val, true);
}
}
});
编辑2:
我现在有些奇怪的行为。我试图填充一个只有3行的表,所以我认为
"${q://QID53/SelectedAnswerRecode/1}";
"${q://QID53/SelectedAnswerRecode/2}";
"${q://QID53/SelectedAnswerRecode/3}";
会给出前一个表中前三行的问题“QID53”的值。但实际上那些返回空字符串,并且直到调用
"${q://QID53/SelectedAnswerRecode/5}";
"${q://QID53/SelectedAnswerRecode/6}";
"${q://QID53/SelectedAnswerRecode/7}";
我得到前三个值。
对于包含14行的表,在调用
之前不会返回任何内容"${q://QID53/SelectedAnswerRecode/4}";
它将表格中的最后3行留空。
假设“SelectedAnswerRecode”之后的数字是行号,我错了吗?有什么关于我错过的偏移吗?
答案 0 :(得分:1)
我认为您想要管道重新编码值。类似的东西:
var r1ar = parseInt("${q://QID2/SelectedAnswerRecode/1}");
var r2ar = parseInt("${q://QID2/SelectedAnswerRecode/2}");
然后设置值:
this.setChoiceValue(1, r1ar, true);
this.setChoiceValue(2, r2ar, true);
确保您的重新编码值与列ID匹配。
根据以下评论进行编辑/添加:
在将页面发送到浏览器之前,javascript中的管道值已解析服务器端,因此它们是固定值。没有办法让它们在javascript中动态化。如果您的问题由于显示逻辑或结转而具有可变数量的行,则您必须在javascript中包含所有可能的管道值,然后检查它们以查看哪些有效。
对于多个答案矩阵,您可以使用str.split(&#39;,&#39;)将逗号分隔列表转换为数组,然后遍历数组。 Qualtrics在逗号分隔列表中的逗号后面包含空格,因此您必须修剪()数组中的字符串。