通过 Javascript 在 Qualtrics 中的个人自定义起始位置

Individual custom start position in Qualtrics through Javascript

我想在 Qualtrics 中使用滑块问题或可拖动条形图来向受访者展示他们在以前的问题中的回答。更具体地说,我根据加权的答案计算出一个值,并希望将滑块或条定位在该值处。 值得注意的是,由于每个受访者都有一个值(存储在嵌入式数据字段中),因此每个受访者的职位都是独立的。 Piping 仅适用于文本字段,据我了解支持页面。

基于我得出了以下条形图代码:

Qualtrics.SurveyEngine.addOnload(function()
{
   var result = "${q://Field/result}";
   var qwidth = $('QID1936~1~track').offsetWidth;
   var resrec = ((qwidth*result)/100);
   $('QID1936').select('.bar').each(function(name, index) {
            name.setStyle({ width: resrec +"px"});
   });
});

基本上,我从嵌入数据中获取每个受访者的 result,获取完整条形图的宽度,根据结果计算应该着色的比率,并更新条形图(遵循上述答案)。

有趣的是,在控制台中完成后一切正常。此外,嵌入的数据也已正确加载 qwidth。 出现两个问题:似乎 resrec 可能计算错误,因为 console.log() 吐出 0 而不是正确的值。我假设这可能是因为变量不被识别为数字,但多次尝试使用 Number() 或 0+var 并没有改变它在 Qualtrics 中的工作方式。在控制台中,它工作得很好。 此外,不会更新条形图(或具有类似代码的滑块),无论是正确的值还是 Qualtrics 生成的 0。

我搜索了两件事:要么是描述的 Javascript 问题的解决方案,要么是我如何使用嵌入的数据更新栏或滑块。或者另一种解决方案是如何将嵌入式数据直接获取到这两种问题格式之一中,作为每个受访者的起始值。

感谢您的帮助或想法!

试试这个:

Qualtrics.SurveyEngine.addOnload(function()
{
    var qid = this.questionId;
    var result = parseFloat("${e://Field/result}");
    var qwidth = $(qid+'~1~track').offsetWidth;
    var resrec = ((qwidth*result)/100);
    $(qid).select('.bar').each(function(name, index) {
        name.style.width = resrec + "px";
    });
});

备注:

  1. 最好不要使用硬编码的 QID
  2. 在管道中使用 e: 来引用嵌入变量。 q: 用于提问。
  3. 使用 parseFloat 将字符串转换为数字
  4. 如果您只设置一个值,则无需使用 setStyle

Qualtrics 支持人员提出的一个解决方案:当您使用 bars and/or 滑块时,管道值实际上是可能的。

诀窍是显示 bar/slider 的 (我们在其他地方的整个调查中不使用的东西)。然后,您可以通过 高级问题选项 > Add Default Choices 访问值后面管道文本的蓝色箭头。通过这种方式,该值被单独设置为嵌入数据或另一个答案。

但是请注意,在访问默认选项之前勾选 "Show value",否则您将只能围绕栏拖动并同时为所有设置。

这是一个使用 Qualtrics Question API 方法 setChoiceValue 的解决方案,不需要您手动计算比率和更新条形长度。

以下是保存在之前问题的嵌入式数据中的十位受访者结果的示例代码。

Qualtrics.SurveyEngine.addOnload(function()
{
  var embedded = ["${e://Field/r1}", "${e://Field/r2}", 
    "${e://Field/r3}", "${e://Field/r4}", "${e://Field/r5}", 
    "${e://Field/r6}", "${e://Field/r7}", "${e://Field/r8}", 
    "${e://Field/r9}", "${e://Field/r10}"];

  for (var i = 0; i < 11; i++) {
    var index = i + 1;
    var choiceInput = embedded[i];

  this.setChoiceValue(index, choiceInput);
}
});

一位受访者:

Qualtrics.SurveyEngine.addOnload(function()
{
var value = "${e://Field/r1}";
this.setChoiceValue(1, value);
});