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

时间:2017-05-03 04:47:02

标签: javascript qualtrics

我想在Qualtrics中使用滑块问题或可拖动条形图向受访者呈现他们在以前的问题中如何回答。更具体地说,我通过加权计算出当时答案的值,并希望滑块或条位于此值。 值得注意的是,由于每个受访者都有一个值(存储在嵌入数据字段中),因此每个受访者的职位都是个人的。 Piping仅适用于文本字段,据我所知,支持页面。

基于this question/answer我来到条形图的以下代码:

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问题的解决方案,基本上我如何用嵌入数据更新条形码或滑块。或者另一种解决方案如何将嵌入数据直接作为每个受访者的起始值直接获得这两种问题格式中的一种。

感谢您的帮助或想法!

3 个答案:

答案 0 :(得分:0)

试试这个:

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:表示嵌入变量。问:是问题。
  3. 使用parseFloat将字符串转换为数字
  4. 如果您只设置一个值
  5. ,则无需使用setStyle

答案 1 :(得分:0)

Qualtrics支持提出的一种解决方案:当您使用条形和/或滑块时,实际上可以使用管道值。

诀窍是显示条形/滑块的(我们在其他地方的整个调查中不使用的东西)。然后,您可以访问高级问题选项> Add Default Choices 用于在值后面管道文本的蓝色箭头。通过此,该值分别设置为嵌入数据或其他答案。

但是,请注意,在访问默认选项之前勾选“显示值”,否则您只能在条形图上拖动并同时为其设置。

答案 2 :(得分:0)

以下是使用Qualtrics Question API方法setChoiceValue的解决方案,该方法不需要您计算比率并手动更新小节的长度。

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

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);
});