qualtrics javascript:使用以前的答案自动填充矩阵表

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

在我的Qualtrics调查中,我问了两次相同的矩阵表(多个答案)问题。当我第二次向用户显示问题时,我希望从用户第一次回答问题时自动填充答案。我看过文档中的代码片段,所以我知道如何选择当前问题中的复选框,例如

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匹配

根据以下评论进行编辑/添加:

  • javascript中的管道值在页面发送到浏览器之前会在服务器端得到解析,因此它们是固定值。在javascript中无法使它们动态。如果您的问题由于显示逻辑或结转而具有可变的行数,那么您必须在javascript中包含所有可能的管道值,然后检查它们以查看哪些是有效的

  • 对于多答案矩阵,可以使用str.split(',')将逗号分隔的列表转换为数组,然后在数组中循环。Qualtrics在逗号分隔的列表中包含逗号后的空格,因此必须修剪()数组中的字符串


  • 多谢!其中一个问题是,我的矩阵表中的行数会因调查的不同而有所不同,因此能够通过编程生成管道文本将是一件好事,例如,
    var r=parseInt(${q://QID2/SelectedAnswerRecode/“+i+”}”)但这似乎并不像这里所描述的那样有效:[我还要补充一点,因为我使用的是一个多答案矩阵表,
    “${q://QID2/SelectedAnswerRecode/1}”
    将返回为第1行选择的值的逗号分隔字符串。帮助代码可重用的一种可能方法是将每个值设置为一个关联数组的一部分,而不是作为单独的变量。然后您可以编写脚本的后半部分,为数组中的每个键/值对执行setChoiceValue。yo你仍然需要手动编写每个变量的代码来捕获,但这会减少所需的代码量。我稍后会尝试发布此变量的基本实现!这听起来与我最终所做的相似,Anthony。我会发布我最终使用的代码。我在最初的问题中添加了一些错误行为。如果有人愿意,我将不胜感激我可以看看。