You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qualtrics问卷中滑块题(含矩阵)0/5/10选项计数的JS问题

统计Qualtrics问卷中滑块题(含矩阵滑块)的0/5/10选中次数问题

我需要统计Qualtrics问卷里所有单个滑块题和矩阵滑块题中,0、5、10这三个值被选中的总次数,已经初始化了Counter0、Counter5、Counter10三个嵌入式数据(初始值均为0),但尝试的代码都无法正常工作:

最初的代码

Qualtrics.SurveyEngine.addOnload(function() {
    var isCorrect10 = 10;
    var currentCounter10 = Qualtrics.SurveyEngine.getEmbeddedData("Counter10");
    
    if (!currentCounter10) {
        currentCounter10 = 0;
    }
    
    var isCorrect0 = 0;
    var currentCounter0 = Qualtrics.SurveyEngine.getEmbeddedData("Counter0");
    
    if (!currentCounter0) {
        currentCounter0 = 0;
    }
    
    var isCorrect5 = 5;
    var currentCounter5 = Qualtrics.SurveyEngine.getEmbeddedData("Counter5");
    
    if (!currentCounter5) {
        currentCounter5 = 5;
    }

    // If it's selected, increment 
    if (isCorrect10) {
        currentCounter10++;
        Qualtrics.SurveyEngine.setEmbeddedData("Counter10",currentCounter10.toString());
    }
    
    if (isCorrect0) {
        currentCounter0++;
        Qualtrics.SurveyEngine.setEmbeddedData("Counter0",currentCounter0.toString());
    }
    
    if (isCorrect5) {
        currentCounter5++;
        Qualtrics.SurveyEngine.setEmbeddedData("Counter5",currentCounter5.toString());
    }

});

问题:无论选中什么值都会计数1次,且无法适配含多个滑块的矩阵题。

修改版本1

Qualtrics.SurveyEngine.addOnload(function() {
    // Get current question ID
    var currentQuestionID = this.getQuestionInfo().QuestionID;
    
    // Define result names for counters
    var Counter10 = "Counter10";
    var Counter0 = "Counter0";
    var Counter5 = "Counter5";
    
    // Retrieve and parse embedded data values for counters
    var currentCounter10 = parseInt(Qualtrics.SurveyEngine.getEmbeddedData(Counter10), 10) || 0;
    var currentCounter0 = parseInt(Qualtrics.SurveyEngine.getEmbeddedData(Counter0), 10) || 0;
    var currentCounter5 = parseInt(Qualtrics.SurveyEngine.getEmbeddedData(Counter5), 10) || 0;

    // Function to get the selected value from a slider based on its number
    function getSliderValue(sliderNumber) {
        var sliderId = currentQuestionID + '_' + sliderNumber;
        var responseTextField = document.getElementById(sliderId);
        if (responseTextField) {
            return parseInt(responseTextField.value, 10); // Convert to integer
        } else {
            console.log("Element with ID " + sliderId + " not found.");
            return null;
        }
    }

    document.getElementById('NextButton').onclick = function(event) {
        // Assuming up to 5 sliders, since 4 is max
        for (var i = 1; i <= 5; i++) {
            var selectedValue = getSliderValue(i);
            if (selectedValue !== null) {
                // Increment the appropriate counter based on the selected value
                if (selectedValue === 10) {
                    currentCounter10++;
                    Qualtrics.SurveyEngine.setEmbeddedData(Counter10, currentCounter10.toString());
                } else if (selectedValue === 0) {
                    currentCounter0++;
                    Qualtrics.SurveyEngine.setEmbeddedData(Counter0, currentCounter0.toString());
                } else if (selectedValue === 5) {
                    currentCounter5++;
                    Qualtrics.SurveyEngine.setEmbeddedData(Counter5, currentCounter5.toString());
                }
                // Exit loop after processing the selected value
                break;
            }
        }

        // Proceed to the next question
        Qualtrics.SurveyEngine.navClick(event, 'NextButton');
    };
});

修改版本2

Qualtrics.SurveyEngine.addOnPageSubmit(function (type) { // To record the selection when the page is submitted
    if (type == "next") {
        var selChoice = this.getSelectedChoices();

        // Set Embedded Data
        var currentcount0 = parseInt(Qualtrics.SurveyEngine.getEmbeddedData('count0'),10); 
        var currentcount5 = parseInt(Qualtrics.SurveyEngine.getEmbeddedData('count5'),10);
        var currentcount10 = parseInt(Qualtrics.SurveyEngine.getEmbeddedData('count10'),10);

        if (selChoice == 5) {
            const newcount5 = currentcount5 + 1 ;
            Qualtrics.SurveyEngine.setEmbeddedData("count5", newcount5);
        };

        if (selChoice == 0) {
            const newcount0 = currentcount0 + 1 ;
            Qualtrics.SurveyEngine.setEmbeddedData("count0", newcount0);
        };
        
        if (selChoice == 10) {
            const newcount10 = currentcount10 + 1 ;
            Qualtrics.SurveyEngine.setEmbeddedData("count10", newcount10);
        };
    }
});

问题:修改后的代码计数器值始终为0,无法正常统计。


解决方案

问题根源

  1. 原代码直接判断固定数值(如isCorrect10=10),该条件永远为真,导致无差别计数
  2. 修改版1依赖DOM元素ID,Qualtrics滑块的实际ID规则不符,且循环break只处理第一个滑块,忽略矩阵题的多个滑块
  3. 修改版2的getSelectedChoices()不适用于滑块题,滑块题需要获取响应值而非选项ID,同时未处理矩阵题的多响应项

通用适配代码(单个滑块+矩阵滑块)

将以下代码添加到每个需要统计的滑块/矩阵滑块题的JavaScript编辑区:

Qualtrics.SurveyEngine.addOnPageSubmit(function(type) {
    // 仅在页面向前提交时执行统计
    if (type !== "next") return;

    // 初始化计数器,处理嵌入式数据为空的情况
    let counter0 = parseInt(Qualtrics.SurveyEngine.getEmbeddedData("Counter0")) || 0;
    let counter5 = parseInt(Qualtrics.SurveyEngine.getEmbeddedData("Counter5")) || 0;
    let counter10 = parseInt(Qualtrics.SurveyEngine.getEmbeddedData("Counter10")) || 0;

    // 获取当前问题的所有响应数据,自动适配单个/矩阵滑块
    const questionResponses = this.getQuestionData().Responses;
    // 遍历所有响应项
    for (const respKey in questionResponses) {
        if (questionResponses.hasOwnProperty(respKey)) {
            const value = parseInt(questionResponses[respKey].Value, 10);
            // 判断并更新对应计数器
            switch(value) {
                case 0:
                    counter0++;
                    break;
                case 5:
                    counter5++;
                    break;
                case 10:
                    counter10++;
                    break;
                default:
                    // 非目标值不处理
                    break;
            }
        }
    }

    // 更新嵌入式数据
    Qualtrics.SurveyEngine.setEmbeddedData("Counter0", counter0.toString());
    Qualtrics.SurveyEngine.setEmbeddedData("Counter5", counter5.toString());
    Qualtrics.SurveyEngine.setEmbeddedData("Counter10", counter10.toString());
});

代码说明

  • 使用addOnPageSubmit事件:确保在页面提交时获取最终选中值,避免提前获取导致的错误
  • 自动适配题型:通过getQuestionData().Responses获取所有响应,兼容单个滑块(1个响应项)和矩阵滑块(多个响应项)
  • 精准判断数值:用switch分支处理目标值,避免逻辑混乱
  • 容错处理:嵌入式数据为空时自动初始化为0,避免NaN错误

注意事项

  1. 确保Counter0、Counter5、Counter10已在问卷流程→嵌入式数据中添加,初始值设为0
  2. 代码需添加到每个需要统计的滑块/矩阵滑块题中(编辑问题→齿轮图标→添加JavaScript)
  3. 测试时可通过浏览器控制台查看嵌入式数据变化,验证计数正确性

内容的提问来源于stack exchange,提问作者flâneur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 16:55:03