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

Qualtrics:使用Javascript为Loop/Merge块内的问题实现计分功能

问题根因

  1. 代码中if判断使用了单等号=,这是赋值运算符而非比较运算符:
    • 执行if(answer = 0)时会直接将answer赋值为0,0对应的布尔值为假,该分支永远不触发
    • 后续执行if(answer = 1)时会直接将answer赋值为1,1对应的布尔值为真,该分支永远触发,所以不管选什么mmm都会被设为1
  2. 第二版代码直接取选项的innerText,拿到的是字符串Yes/No,和数字0/1完全不匹配,即使修正等号也无法得到正确结果

解决方案

首先提前在**Survey Flow最顶部(进入Loop/Merge块之前)**声明answer和mmm两个Embedded Data字段,不需要设置默认值,只需提前创建即可,否则setEmbeddedData无法正常写入数值。

推荐写法(直接读取Recode值)

直接使用你第一版代码的取值逻辑,修正比较运算符即可:

Qualtrics.SurveyEngine.addOnPageSubmit(function() {
    // 读取选中选项的Recode值并转为数字,避免字符串类型导致的判断异常
    const answer = parseInt(jQuery("#" + this.questionId + " .q-checked").val(), 10);
    Qualtrics.SurveyEngine.setEmbeddedData('answer', answer);
    // 用===做严格相等判断
    if(answer === 0) {
        Qualtrics.SurveyEngine.setEmbeddedData('mmm', '0');
    } else if(answer === 1) {
        Qualtrics.SurveyEngine.setEmbeddedData('mmm', '1');
    }
});

适配第二版代码(读取选项文本)

如果你需要基于选项文本判断,可以使用修正后的第二版代码:

Qualtrics.SurveyEngine.addOnPageSubmit(function() {
    // 去除文本前后空格避免匹配失败
    const answerText = this.questionContainer.querySelector(".q-checked").nextElementSibling.innerText.trim();
    Qualtrics.SurveyEngine.setEmbeddedData('answer', answerText);
    if(answerText === 'Yes') {
        Qualtrics.SurveyEngine.setEmbeddedData('mmm', '0');
    } else if(answerText === 'No') {
        Qualtrics.SurveyEngine.setEmbeddedData('mmm', '1');
    }
});

完成修改后,原有显示逻辑无需调整,即可实现选Yes展示问题A、选No展示问题B的效果。

内容的提问来源于stack exchange,提问作者Mary A.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:30:00