javascript - 质量 javascript : autopopulate matrix table using previous answers

标签 javascript html qualtrics

我在 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”之后的数字是行号是错误的吗?我缺少关于偏移量的东西吗?

最佳答案

我想您会希望通过管道输入重新编码值。像这样的东西:

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

根据以下评论进行编辑/补充:

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

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

关于javascript - 质量 javascript : autopopulate matrix table using previous answers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35024526/

相关文章:

javascript - 在 Coffeescript 中,我如何根据一个属性对一组对象进行分组?

html - 如何将不透明度应用于 Opera 中的 Flash Player?

javascript - 查找正在更改 DOM 元素的 javascript

javascript - Qualtrics JavaScript : Append an image over matrix text boxes

JavaScript 正则表达式(字符串应仅包含字母、空格、连字符)

javascript - 比较两个对象数组与键,如果没有找到,则将其添加到数组中

javascript - 可以在 .env 文件 Node js 中发送参数

javascript - 文本的实时预览使链接在悬停时不会改变背景颜色

css - 在 Qualtrics 中改变答案选择之间的空间

javascript - Qualtrics:有没有好的方法来调用这些嵌入的数据字段?