关于Qualtrics,如何用javascript保存嵌入的数据(考虑到Qualtrics最近已经更新,旧的SO解决方案

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 最近 考虑到 旧的 解决方案 SO 更新 javascript 何用 保存 关于      更新时间:2023-09-26

几个月前,我使用这里的优秀建议在Qualtrics中创建了一个调查,使用一些javascript代码将人们的回答(通过移动滑块给出)保存为嵌入数据。这一切都取决于当点击"Next"按钮时能够调用一些函数,就像上面链接中的$('NextButton').onclick = function (event)下所示。

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

我给Qualtrics公司发了邮件寻求建议,他们的支持人员回信说:

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

我在Qualtrics网站上找不到任何关于上述更新的更多信息,或者指示是否有一个新的CSS选择器,可以用来选择当前显示的"下一个"按钮,取代$("NextButton"),我不知道如何逆向工程Qualtrics调查网页为自己解决。

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

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

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

也就是说,向NextButton添加事件侦听器在SE或JFE中从来都不能可靠地工作。Qualtrics在Next按钮上有自己的事件侦听器。最可靠的方法是使用JavaScript隐藏NextButton,然后添加您自己的按钮,执行您需要的任何过程,然后在最后单击NextButton。

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

当我给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);
    });

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

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