On Qualtrics, how to save embedded data with javascript (given that qualtrics has recently been updated and an old SO solution no longer works)

前端 未结 2 453
情书的邮戳
情书的邮戳 2021-01-27 02:53

A few months ago I used the excellent advice over here to create a survey in Qualtrics with some javascript code that saved people\'s responses (given by moving a slider) as emb

相关标签:
2条回答
  • 2021-01-27 03:26

    I haven't tried T. Gibbon's Q_JFE=0 suggestion above, and the suggestion to hide the Next button didn't work for me (though it's possible this was just because I did it wrong - perhaps someone could comment if it worked for them).

    When I mailed Qualtrics, their suggestion was to add an event listener as follows, and then remove it before applying another.

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

    However, since I'm just a psychologist who wants to get data quickly rather than a javascript programmer, I wasn't sure just how to go about 'removing an event listener', and decided to try what I thought was a simpler solution, in that it doesn't rely on having some functions run when the 'next' button is clicked.

    For each question that contains a slider whose data I want to save (I had just one such question per page), I included the following, to save the ID for that particular question as embedded data. Each question's ID is saved with a unique tag ('q1ID' in the following). I had one such question per page.

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

    Then once all the slider-type questions had been presented, on the following page I included this code:

    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);
    
        });
    });
    

    Initially, I'd tried what I thought was more sensible:

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

    But as pointed out here, Qualtrics won't allow you to fetch data by concatenating a variable into a string like this. Consequently, even though it seems a ridiculously roundabout what to do it, I created the pipedStrings object that has a list of all the question IDs I needed (which I found by exporting the survey to a text file and searching for my question tags).

    This allowed me to save the responses to slider questions as embedded data, with the keys listed in tags. If anyone has a simpler approach, avoiding have to create the dictionary of pre-formatted strings, please do comment.

    0 讨论(0)
  • 2021-01-27 03:40

    Qualtrics uses two survey engines: the older SE and the newer JFE. Qualtrics Support was referring to JFE. You can force Qualtrics to use SE by adding the parameter Q_JFE=0 to your survey link. That might be a quick fix.

    That said, adding an event listener to the NextButton has never worked reliably with either SE or JFE. Qualtrics has its own event listeners on the Next Button that interfere. The most reliable method is to use JavaScript to hide the NextButton, then add your own button that performs any process you need, then at the end clicks NextButton. See example here.

    0 讨论(0)
提交回复
热议问题