在Qualtrics调查中,单击下一个按钮时,如何将对项目的响应保存到嵌入数据中

In Qualtrics Surveys, how can you save the response to an item into embedded data when the next button is clicked?

本文关键字:响应 项目 保存 数据 单击 调查 Qualtrics 下一个 按钮      更新时间:2023-09-26

实际上,我只是花了很长时间从参差不齐的文档和大量的Web控制台检查中拼凑出这个问题的答案。由于到目前为止最有用的信息来自Stack Overflow,我想把这个问题及其答案放在这里,以便将来搜索其他任何人。

问题是,如何将javascript添加到一个问题中,从而立即将该问题的答案保存到嵌入式数据字段中?立即,就像在,而不是等到下一个Qualtrics.SurveyEngine.AddOnLoad()。这涉及到一个子问题,即如何将javascript添加到调查问题中,并在单击"下一步"按钮时使其运行?以及子问题,如何保存根据问题ID动态命名的嵌入式数据字段?

Caveat Emptor:Qualtrics没有明确支持所有这些JavaScript黑客攻击,因此此处的代码最终可能会停止工作。

下面介绍如何获取滑块的响应值并将其保存在嵌入的数据字段中,其名称根据问题 ID 进行编号。仅当滑块的文本输入框可见时,此方式才有效。如果没有这个,可能也有一种方法可以做到这一点,也许其他人可以将其添加到答案中。

Qualtrics.SurveyEngine.addOnload(function()
{
    // everything here runs when the page is loaded. So, we can get the Question ID here,
    // but we can't get the response value until later.
    var currentQuestionID = this.getQuestionInfo().QuestionID
    //var resultEmbeddedName = currentQuestionID + "_result"  //e.g. QID6_result 
    var resultEmbeddedName = "result_" + currentQuestionID.substring(3)   //e.g. result_6
    $('NextButton').onclick = function (event) {
        // everything in here will run when you click the next button
        // note that it has access to javascript variables from the enclosing function
        // however, if you declare something in here with "var" then it will be a LOCAL variable
        // the following alert will appear when you click the next button. For me, it appears twice;
        // I'm not sure why.
        // Save the current question's response value
        var responseTextField = document.getElementById(currentQuestionID + '~1~result')
        var currentResponse = responseTextField.value
        alert("Result: " + currentResponse + "'nwill be available to future questions as: 'n$" + "{e://Field/" + resultEmbeddedName + "}")
        Qualtrics.SurveyEngine.setEmbeddedData(resultEmbeddedName, currentResponse)
        // and now run the event that the normal next button is supposed to do
        Qualtrics.SurveyEngine.navClick(event, 'NextButton')
    }
});

对于多项选择题,它有点复杂。 这是有效的代码,其中包含大量注释和演示。请注意,变量"currentResponse"最终保存所选选项的NUMBER,而"currentChoiceText"最终保存该选项的文本标签(例如Yes或No)。因此,您可以保存您喜欢的任何一种。

Qualtrics.SurveyEngine.addOnload(function()
{
    // everything here runs when the page is loaded. So, we can get the Question ID here,
    // but we can't get the response value until later.
    var currentQuestionID = this.getQuestionInfo().QuestionID
    console.log("Current Question ID is: " + currentQuestionID)
    //var resultEmbeddedName = currentQuestionID + "_result"  //e.g. QID6_result 
    var resultEmbeddedName = "result_" + currentQuestionID.substring(3)   //e.g. result_6
    $('NextButton').onclick = function (event) {
        // everything in here will run when you click the next button
        // note that it has access to javascript variables from the enclosing function
        // however, if you declare something in here with "var" then it will be a LOCAL variable
        // the following alerts will appear when you click the next button. For me, it appears twice;
        // I'm not sure why.
        // Save the current question's response value
        var questionObject = Qualtrics.SurveyEngine.getInstance(currentQuestionID)
        var currentResponse = questionObject.getSelectedChoices()[0] //in case more than one is selected, it will only work here to take one!   
        var theQuestionInfo=questionObject.getQuestionInfo()
        var choicesObject=theQuestionInfo.Choices
        var thisChoiceObject=choicesObject[currentResponse]
        var currentChoiceText=thisChoiceObject.Text
        console.log("Number of the current choice is " + currentResponse)
        console.log("Text of the current choice is " + currentChoiceText)

        alert("Result: " + currentChoiceText + "'nwill be available to future questions as: 'n$" + "{e://Field/" + resultEmbeddedName + "}")
        Qualtrics.SurveyEngine.setEmbeddedData(resultEmbeddedName, currentChoiceText)
        // and now run the event that the normal next button is supposed to do
        Qualtrics.SurveyEngine.navClick(event, 'NextButton')
    }
});

这两个都动态引用问题 ID,因此如果您将问题复制到新问题,它们将单独工作。 无需更改任何 JavaScript 代码。

要测试这些,请制作滑块问题或多项选择题并添加相应的 javascript。然后,在分页符后制作另一张幻灯片(分页符是导致出现"下一步"按钮所必需的)。在该幻灯片中,放置一个管道文本字段(如 ${e://Field/result_1})或警报对话框告诉您保存的值的任何内容。 预览调查时,您应该会在第二个问题的管道文本字段中看到在第一个问题上输入的值。

就此演示而言,您当然可以通过管道文本实现相同的效果。但是,如果您有某种原因希望问题实际上立即将其响应保存到嵌入式数据中,这将为您做到这一点。

此外,如果您需要知道如何在单击"下一步"按钮时运行代码,这可以适应任何一般需求。

我在$('NextButton').onclick方法中调用以下代码会强制$('NextButton').onclick方法调用两次时遇到问题。 删除它对我有用,因此 onclick 方法只被调用一次,但仍会推进调查。

// and now run the event that the normal next button is supposed to do
Qualtrics.SurveyEngine.navClick(event, 'NextButton')

每次按"下一步"按钮时,这都有效。希望对您有所帮助!

Qualtrics.SurveyEngine.addOnload(function(){
var nextButton =document.getElementById("NextButton");
if (nextButton!=null){
    $("NextButton").on("click", function(event) {
    alert("Hello World!");
    });
  } 
});