【问题标题】:On Qualtrics, how to save embedded data with javascript (given that qualtrics has recently been updated and an old SO solution no longer works)在 Qualtrics 上,如何使用 javascript 保存嵌入式数据(鉴于 qualtrics 最近已更新并且旧的 SO 解决方案不再有效)
【发布时间】:2016-12-22 00:36:27
【问题描述】:

几个月前,我使用here 上的出色建议在 Qualtrics 中创建了一项调查,其中包含一些 javascript 代码,将人们的响应(通过移动滑块给出)保存为嵌入式数据。这一切都取决于在单击“下一步”按钮时能够调用某些函数,如上述链接中的$('NextButton').onclick = function (event) 下所示。

我想在这个周末重复使用该调查,发现数据不再保存。在摆弄了一下之后,我意识到目前,任何此类功能现在只会在第一次单击“下一步”按钮时运行,而不会在任何后续时间运行。换句话说,完全相同的 javascript 要么工作要么什么都不做,这取决于它是否恰好是第一次单击下一个按钮。

我向 Qualtrics 发邮件寻求建议,他们的支持人员回信了以下内容:

每次您进入调查中的新页面时,运行我们调查的旧应用程序都会重新加载页面。运行我们调查的当前应用程序是单页应用程序,进入调查的下一页不会刷新整个页面,它只是显示不同的部分。

我在 Qualtrics 网站上找不到任何关于上述更新的更多信息,或者指出是否有新的 CSS 选择器可用于选择当前显示的“下一步”按钮,替换 $("NextButton" ),而且我不知道如何对 Qualtrics 调查网页进行逆向工程来为自己解决问题。

谁能建议如何更改上面链接答案中的代码以在更新的 Qualtrics 平台上工作?或者任何人都可以确认他们的旧代码是否仍然有效,在这种情况下,我错误地识别出了问题所在。

我没有足够的声誉来评论上述链接的解决方案来指出这个问题,但也许其他人可以这样做。如果我从 Qualtrics 支持部门获得更多信息,我会更新此信息。

【问题讨论】:

    标签: javascript html css prototypejs qualtrics


    【解决方案1】:

    我还没有尝试过上面 T. Gibbon 的 Q_JFE=0 建议,隐藏“下一步”按钮的建议对我不起作用(尽管这可能只是因为我做错了 - 也许有人可以评论一下为他们工作)。

    当我邮寄 Qualtrics 时,他们的建议是添加一个事件侦听器,如下所示,然后在应用另一个之前将其删除。

    document.getElementById('NextButton').addEventListener(function (event) {
    doStuff();
    });
    

    但是,由于我只是一个想要快速获取数据的心理学家而不是 javascript 程序员,所以我不确定如何“删除事件侦听器”,并决定尝试我认为的更简单的解决方案,因为它不依赖于在单击“下一步”按钮时运行某些功能。

    对于每个包含我要保存其数据的滑块的问题(我每页只有一个这样的问题),我添加了以下内容,以将该特定问题的 ID 保存为嵌入数据。每个问题的 ID 都保存有唯一的标签(以下为“q1ID”)。我每页都有一个这样的问题。

    Qualtrics.SurveyEngine.setEmbeddedData('q1ID', this.getQuestionInfo().QuestionID);
    

    然后,一旦所有滑块类型的问题都提出了,在下一页我包含以下代码:

    Qualtrics.SurveyEngine.addOnload(function()
    {
        var tags = ['q1','q2', 'q3'];
    
        var pipedStrings = {'QID356':'${q://QID356/TotalSum}',
            'QID357':'${q://QID357/TotalSum}',
            'QID358':'${q://QID358/TotalSum}'};
    
        tags.forEach(function(tag) {
            var qID = Qualtrics.SurveyEngine.getEmbeddedData(tag + 'ID');
            var response = pipedStrings[qID];
            Qualtrics.SurveyEngine.setEmbeddedData(tag, response);
    
        });
    });
    

    最初,我尝试了我认为更明智的方法:

    tags.forEach(function(tag) {
            var qID = Qualtrics.SurveyEngine.getEmbeddedData(tag + 'ID');
            var response = '${q://' + qID + '/TotalSum}';
            Qualtrics.SurveyEngine.setEmbeddedData(tag, response);
    
        });
    

    但正如here 指出的那样,Qualtrics 不允许您通过将变量连接成这样的字符串来获取数据。因此,尽管这似乎是一个可笑的迂回做法,我创建了 pipedStrings 对象,其中包含我需要的所有问题 ID 的列表(我通过将调查导出到文本文件并搜索我的问题标签来找到它)。

    这使我可以将滑块问题的回答保存为嵌入数据,其中的键列在tags 中。如果有人有更简单的方法,避免创建预格式化字符串的字典,请发表评论。

    【讨论】:

    • 为什么不在调查流程中分配嵌入变量,例如 q1ID = ${q://QID356/TotalSum}?
    • 这是一个比您的建议更通用的解决方案,因为它允许问题随机化,我认为这在心理学调查中很常见,值得考虑。例如,在我的情况下,对于每个块,都会显示问题的两种可能变化中的随机一种。因此,“q1”的问题 ID 可能是 QID356 或可能是 QID357,具体取决于碰巧向参与者显示的问题变体。我不明白如何在调查流程中分配它,但如果有办法这样做,请告诉我。
    • 我需要这样做的另一个原因(同样,我认为这将是一个足够普遍的需求) - 我需要根据满足的特定条件对某些响应执行操作。例如,我必须对一些问题进行逆向评分,而不是其他问题。
    • 如果您随机显示 2 个 q1 中的 1 个(这不是您发布的代码所说的),那么您可以在调查流程中执行此操作:q1 = $e{ q://QID356/TotalSum + q://QID357/TotalSum }。我不明白你的第二点。除非您没有向我们展示某些东西,否则您最终会得到具有相同值的相同变量。
    • 好的,如果响应之间没有其他差异,这是在调查流程中执行此操作的明智方法。但是,在我的情况下,如果显示每个问题的第二个变体,我想要保存的响应实际上是 100 减去给定的响应。因此,如果他们对第二个版本的回复为 21,我想将他们的回复保存为 79。是的,我确信我可以使用您的建议的某个版本来做到这一点,但重点是我的解决方案使人们可以轻松地对他们想要的响应变量进行任何操作 - 它很容易适应其他人的需求。
    【解决方案2】:

    Qualtrics 使用两个调查引擎:较旧的 SE 和较新的 JFE。 Qualtrics Support 指的是 JFE。您可以通过将参数 Q_JFE=0 添加到您的调查链接来强制 Qualtrics 使用 SE。这可能是一个快速的解决方案。

    也就是说,向 NextButton 添加事件侦听器在 SE 或 JFE 中从未可靠地工作过。 Qualtrics 在 Next Button 上有自己的事件侦听器,它们会干扰。最可靠的方法是使用 JavaScript 隐藏 NextButton,然后添加您自己的按钮来执行您需要的任何过程,然后最后单击 NextButton。参见示例here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-05
      • 1970-01-01
      • 2011-03-23
      • 2018-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多