2

我目前正在进行一项 Qualtrics 调查,在该调查中,受访者必须解决一长串字谜,然后回答一些人口统计问题。

为了使字谜部分更容易,我使用了循环和合并块:第一个字段是要解决的字谜,第二个字段是字谜的解决方案,因此调查可以将受访者的答案与每个字谜的解决方案。

事实上,该调查运行良好:但是,我希望通过在响应字段中键入“EXIT”让受访者提前退出循环,并将他们重定向到下一个问题块(人口统计问题)。

这通常是使用“跳过”逻辑实现的:但是,跳到块的末尾并不能解决问题(循环重新启动)。我设法将他们重定向到调查的末尾,而不是人口统计问题块。

有没有办法使用 javascript 跳转到人口统计块或提前退出循环并合并块?我是否错过了可以解决问题的 Qualtrics 选项?

4

3 回答 3

6

如果这仍然与您相关:我需要相同的功能,这就是我解决它的方法:首先,我定义一个辅助变量,调用它EndLoop,我将其初始化为 0。然后我设置一个函数来更改 EndLoop 的值在人们按下按钮后为 1,另外我在循环中的问题中添加了一个显示逻辑,仅当 EndLoop 仍然为 0 时才显示它们,并在 EndLoop 为 1 时隐藏问题。

这是一个分步说明以及 javascript 和 html 代码。

粗体字是你需要做的,要点是更详细的说明如何去做。

1. 在你的循环和合并之前定义一个名为的嵌入数据字段EndLoop并将其初始化为 0。

  • 转到调查流程面板
  • 添加新元素 > 选择嵌入数据字段
  • 将字段命名为“EndLoop”
  • 通过单击“立即设置值”链接将其值 t0 设置为数字 0
  • 确保在合并循环块之前移动它

2. 为循环中的每个项目设置一个显示逻辑,以在 'EndLoop' = 0 条件下显示它们

  • 转到循环中每个问题的选项菜单
  • 选择“添加显示逻辑”
  • 从第一个下拉菜单中选择“嵌入数据”
  • 新类型字段打开 > 作为名称类型EndLoop+ 选择“等于” + 类型 0 作为值

3. 在人们应该能够选择退出的页面中插入一个自定义按钮。该按钮运行一个名为 setEndLoop() onclick 的用户定义函数。

  • 单击应出现按钮的问题
  • 在问题文本的右上角选择“html 视图”
  • 我使用的代码是:

    <input id="css-class-mybutton" onclick="setEndLoop()" value=" done " type="button">
    
  • 如果要更改按钮文本,请更改“完成”value = " done "

4.使用自定义javascript定义函数setEndLoop()将EndLoop的值更改为1并模拟下一步按钮点击

  • 转到循环中每个问题的选项菜单
  • 选择“添加 JavaScript”

我使用的代码是:

    /* Get the EndLoop variable */
    var EndLoop = "${e://Field/EndLoop}";

    Qualtrics.SurveyEngine.addOnload(function(){

        /* hide previous and next button */
        $('NextButton') && $('NextButton').hide();
        $('PreviousButton') && $('PreviousButton').hide();

        /* Function: on click on user-defined button -> change the field EndLoop */
        var that = this;

        setEndLoop = function(){
            Qualtrics.SurveyEngine.setEmbeddedData('EndLoop', 1);
            that.clickNextButton();
        };
    });

该按钮将没有默认样式,因此,定义一个自定义 css 来设置您的按钮样式,使其看起来像您的主题的按钮。我在这里使用的按钮的类名是id="css-class-mybutton",.css-class-mybutton{ ... }在 css 中使用。

希望有帮助。

于 2014-11-30T18:50:51.800 回答
3

我知道这有点晚了,但我有一个类似的问题,想发布一个替代解决方案。我使用了循环和合并功能,但我不想让参与者单击按钮退出循环,而是想使用多项选择题来退出循环。这个问题是,“你想问更多问题吗?”,回答是和否。如果参与者选择“是”,他们将继续循环,如果他们选择“否”,他们将退出循环并继续下一个问题。

我的前两个步骤与上面的相同。

1.设置一个名为 EndLoop 的嵌入式数据字段并将值设置为 1。 - 在调查流程面板中选择添加一个元素。然后输入名称 EndLoop。- 然后现在选择设置值并将值设置为 1。 - 确保这是在调查流程中的循环和合并块之前。

  1. 对于循环和合并块中的每个问题,使用显示逻辑来确保它们仅在嵌入数据元素 EndLoop 为 1 时显示。

  2. 现在的问题是“您想问更多问题吗?” 在添加 javascript 区域中添加以下代码。

    • 可以通过单击屏幕左侧问题编号下的高级选项按钮找到 javascript 区域。选择“添加 javascript...”
      • 将会有一些代码已经存在......它应该看起来像这样:

    Qualtrics.SurveyEngine.addOnload(function() {

    /将您的 Javascript 放在此行下方/

    });

    • 基本上,我使用事件跟踪将嵌入式数据字段endloop更新为与答案选择时与答案选择相关的数值值。在这种情况下,答案“是”的值为 1,因为它是第一个选项,而“否”的值为 2,因为它是第二个选项。When "No" was selected, the embedded data field EndLoop was set to a value of 2. This then meant that none of the questions would display since they have display logic to ensure they only display when the EndLoop field is 1.

我的整个代码如下所示:

Qualtrics.SurveyEngine.addOnload(function ()
{
    this.questionclick = function(event,element)
    {
        console.log(event, element);
        if (element.type == 'radio')
        {
            var choiceNum = element.id;
            if (choiceNum == 2)
            {
           Qualtrics.SurveyEngine.setEmbeddedData("EndLoop", choiceNum);
            }
        }
    }
});
于 2015-07-16T18:27:05.963 回答
-1

我使用了第二种解决方案。这是脚本的一个小更正:我写element.id.split('~')[2]而不是element.id,它起作用了!

Qualtrics.SurveyEngine.addOnload(function ()
{
    this.questionclick = function(event,element)
    {
        console.log(event,element);
        if (element.type == 'radio')
    {
        var choiceNum = element.id.split('~')[2];
        if (choiceNum == 2)
        {
       Qualtrics.SurveyEngine.setEmbeddedData("EndLoop", choiceNum);
        }
    }
}
});
于 2020-07-02T13:40:07.890 回答