qualtrics javascript:使用以前的答案自动填充矩阵表
在我的Qualtrics调查中,我问了两次相同的矩阵表(多个答案)问题。当我第二次向用户显示问题时,我希望从用户第一次回答问题时自动填充答案。我看过文档中的代码片段,所以我知道如何选择当前问题中的复选框,例如qualtrics javascript:使用以前的答案自动填充矩阵表,javascript,html,qualtrics,Javascript,Html,Qualtrics,在我的Qualtrics调查中,我问了两次相同的矩阵表(多个答案)问题。当我第二次向用户显示问题时,我希望从用户第一次回答问题时自动填充答案。我看过文档中的代码片段,所以我知道如何选择当前问题中的复选框,例如 for (var i = 1; i <= rows; i++) { for (var j = 1; j <= cols; j++) { this.setChoiceValue(i, j, true); } } 建议使用管道文本,大致如下: va
for (var i = 1; i <= rows; i++) {
for (var j = 1; j <= cols; j++) {
this.setChoiceValue(i, j, true);
}
}
建议使用管道文本,大致如下:
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);
}
}
});
请给出问题“QID53”上表中前三行的值。但实际上这些返回空字符串,直到调用
"${q://QID53/SelectedAnswerRecode/5}";
"${q://QID53/SelectedAnswerRecode/6}";
"${q://QID53/SelectedAnswerRecode/7}";
"${q://QID53/SelectedAnswerRecode/4}";
我得到了前三个值
对于包含14行的表,在调用
"${q://QID53/SelectedAnswerRecode/5}";
"${q://QID53/SelectedAnswerRecode/6}";
"${q://QID53/SelectedAnswerRecode/7}";
"${q://QID53/SelectedAnswerRecode/4}";
它会将表中的最后3行留空
假设“SelectedAnswerRecode”后面的数字是行号,我错了吗?有没有我遗漏的偏移量 我想您应该输入重编码值。比如:
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匹配
根据以下评论进行编辑/添加:
多谢!其中一个问题是,我的矩阵表中的行数会因调查的不同而有所不同,因此能够通过编程生成管道文本将是一件好事,例如,
var r=parseInt(${q://QID2/SelectedAnswerRecode/“+i+”}”)代码>但这似乎并不像这里所描述的那样有效:[我还要补充一点,因为我使用的是一个多答案矩阵表,“${q://QID2/SelectedAnswerRecode/1}”
将返回为第1行选择的值的逗号分隔字符串。帮助代码可重用的一种可能方法是将每个值设置为一个关联数组的一部分,而不是作为单独的变量。然后您可以编写脚本的后半部分,为数组中的每个键/值对执行setChoiceValue。yo你仍然需要手动编写每个变量的代码来捕获,但这会减少所需的代码量。我稍后会尝试发布此变量的基本实现!这听起来与我最终所做的相似,Anthony。我会发布我最终使用的代码。我在最初的问题中添加了一些错误行为。如果有人愿意,我将不胜感激我可以看看。