在 Qualtrics 中使用 javascript 将可拖动栏设置为自定义开始位置

Set draggable bars to custom start position with javascript in Qualtrics

在 Qualtrics 中,可以使用 "Custom Start Position" 设置可拖动栏的起始位置(即它们的宽度)。这是通过在编辑调查时将条形图拖动到所需的宽度来完成的。 但是,我正在寻找一种方法来使用 JavaScript(或原型 JavaScript)将条形宽度设置为起始位置。

这是我的尝试,首先(成功地)尝试更改条形图的颜色(在 qualtrics 和 jsfiddle 中),然后(成功地)尝试调整这些尝试以更改 jsfiddle 上的条形图宽度;然后卡住了,因为在 jsfiddle 上有效的方法在 Qualtrics 上不起作用。


在 Qualtrics 中,我可以使用以下原型 JavaScript(改编自 this answer)更改可拖动滑块的颜色:

Qualtrics.SurveyEngine.addOnload(function()
{
   //change the color of all bars to red for testing
    $(this.questionId).select('.bar').each(function(name, index) {
        name.style.backgroundColor = "red";
    });
});

可以看到(并检查)结果here。检查 link 中的调查确实表明 background-color 已设置为红色: <div id="QID2~2~bar" class="bar" style="width: 103px; background-color: red;"></div>。宽度参数也存在,这意味着我应该能够使用以下代码修改宽度(当将库设置为原型时,它确实适用于 jsfiddle):

$("test").select('.bar').each(function(name, index) {
        name.setStyle({ width: '40px'});
});

但是,此代码不适用于 Qualtrics(将 $("test") 替换为 $(this.questionId) 并将代码包含在 Qualtrics addOnload 函数中)。


以下 javascript 也适用于 Qualtrics 以更改条形颜色(改编自 this answer):

Qualtrics.SurveyEngine.addOnload(function()
{
    //change the color of all bars to red for testing
    var bar = document.querySelectorAll('.bar');
    for (var i=0; i < bar.length; i++) {
        bar[i].setAttribute("style", "background-color:red");
    }
});

使用这段代码,我还可以调整 jsfiddle 上的 div 宽度:

var bar = document.querySelectorAll('.bar');
for (var i=0; i < bar.length; i++) {
 bar[i].setAttribute("style", "width:40px");
}

但是,这在 Qualtrics 中同样没有效果。


所以,长话短说:有没有办法以编程方式为 Qualtrics 中的条形图提供起始位置,例如,将它们的宽度设置为父元素的 50% div?


更新:

深入研究 Qualtrics Question API 后,我发现 setChoiceValue 我可以通过编程方式 select 多项选择项。例如,

Qualtrics.SurveyEngine.addOnload(function()
{
    this.setChoiceValue(2,true); 

});

将 select 第二个单选按钮的值设置为 true:

但是,到目前为止,我无法将 setChoiceValue 应用于可拖动栏或找到类似的等价物。


更新 2:

Qualtrics 支持(他们非常友好和平易近人)建议 setChoiceAnswerValue 可能是我正在寻找的。但是,他们还解释说,他们无法为 JavaScript 提供客户支持。我看了一下 more recent version of the API documentation,其中也列出了 setChoiceAnswerValue,但到目前为止没有成功。

我一定是在我的原始代码中打错了字,因为事实证明我开始使用的确实有效:

Qualtrics.SurveyEngine.addOnload(function()
{
            $(this.questionId).select('.bar').each(function(name, index) {
            name.setStyle({ width: '50px'});
            });
});

这是使用 setChoiceValue 方法设置可拖动条的自定义起始位置的解决方案,如 Qualtrics Question API 中所述。

下面是一个包含 10 个柱状图的问题的示例代码,使用了之前问题中的嵌入数据。

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()
{
  this.setChoiceValue(2, "80");
});