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

Qualtrics区块多问题自定义验证:强制upvote/downvote各4次咨询

在Qualtrics中实现强制4次Upvote和4次Downvote的方案

核心思路

你提到的嵌入数据计数思路是可行的,但需要结合JavaScript实现实时计数更新、选项禁用控制和下一步按钮的状态切换。以下是可落地的分步操作:


步骤1:初始化嵌入数据字段

  1. 进入问卷的「流程」页面,在目标区块上方添加两个嵌入数据字段:
    • 字段名:upvoteCount,初始值设为0
    • 字段名:downvoteCount,初始值设为0
  2. 确保这两个字段在目标区块之前加载,保证计数能被正确读取和更新。

步骤2:给区块内所有问题添加自定义JavaScript

将以下代码复制到区块内每个问题的「添加JavaScript」面板中(问题编辑页面→齿轮图标→添加JavaScript):

Qualtrics.SurveyEngine.addOnload(function() {
    var survey = Qualtrics.SurveyEngine;
    var currentQuestion = this;

    // 从嵌入数据读取当前计数,避免页面刷新后丢失状态
    let upvoteCount = parseInt(survey.getEmbeddedData("upvoteCount")) || 0;
    let downvoteCount = parseInt(survey.getEmbeddedData("downvoteCount")) || 0;

    // 页面加载时先禁用已达上限的选项
    disableOverLimitChoices(currentQuestion, upvoteCount, downvoteCount);

    // 监听选项点击事件
    currentQuestion.getChoices().forEach(choice => {
        choice.onclick(() => {
            const selectedText = choice.getChoiceText().trim();
            // 更新计数并同步到嵌入数据
            if (selectedText === "upvote") {
                upvoteCount++;
                survey.setEmbeddedData("upvoteCount", upvoteCount);
            } else if (selectedText === "downvote") {
                downvoteCount++;
                survey.setEmbeddedData("downvoteCount", downvoteCount);
            }

            // 更新区块内所有问题的选项状态
            updateAllBlockChoices(upvoteCount, downvoteCount);
            // 检查是否满足条件,切换下一步按钮状态
            toggleNextButton(upvoteCount, downvoteCount);
        });
    });

    // 初始加载时检查是否已满足条件(比如回退页面的情况)
    toggleNextButton(upvoteCount, downvoteCount);
});

// 禁用当前问题中已达上限的选项
function disableOverLimitChoices(question, upvoteCount, downvoteCount) {
    question.getChoices().forEach(choice => {
        const text = choice.getChoiceText().trim();
        if (text === "upvote" && upvoteCount >= 4) {
            choice.disable();
        } else if (text === "downvote" && downvoteCount >= 4) {
            choice.disable();
        }
    });
}

// 更新区块内所有问题的选项禁用状态
function updateAllBlockChoices(upvoteCount, downvoteCount) {
    const blockQuestions = Qualtrics.SurveyEngine.getCurrentBlock().getQuestions();
    blockQuestions.forEach(question => {
        disableOverLimitChoices(question, upvoteCount, downvoteCount);
    });
}

// 控制下一步按钮的启用/禁用
function toggleNextButton(upvoteCount, downvoteCount) {
    const nextBtn = document.getElementById("NextButton");
    if (upvoteCount === 4 && downvoteCount === 4) {
        nextBtn.disabled = false;
        nextBtn.style.opacity = "1";
    } else {
        nextBtn.disabled = true;
        nextBtn.style.opacity = "0.5";
    }
}

步骤3:关键细节说明

  1. 选项文本匹配:代码中判断的"upvote"和"downvote"必须和你问卷中选项的文本完全一致(包括大小写、空格),否则计数逻辑会失效。
  2. 初始按钮状态:代码默认会在页面加载时禁用下一步按钮,直到计数达标才会启用,无需额外设置。
  3. 测试验证:发布测试链接后,模拟操作:
    • 选满4次upvote后,后续问题的upvote选项会自动灰掉无法点击
    • 选满4次downvote后同理
    • 只有当upvote和downvote都达到4次时,下一步按钮才会变为可点击状态
  4. 页面刷新兼容:因为计数存在嵌入数据中,参与者刷新页面后,计数会从嵌入数据中读取并恢复选项禁用状态,不会丢失进度。

内容的提问来源于stack exchange,提问作者user72716

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 22:21:37