Qualtrics更新后:用JS嵌入数据统计文本框响应数实现显示逻辑
解决Qualtrics统计文本框数量并控制问题显示(无冗余页面)
我明白你的痛点——之前的方案因为Qualtrics更新失效,现在不得不加个没用的中间页面嵌JS,确实很烦人。其实不用这么麻烦,咱们可以利用Qualtrics的嵌入式数据和页面级事件来搞定,完全去掉冗余页面:
步骤1:创建嵌入式数据存储统计结果
首先在你的Survey Flow里添加一个嵌入式数据字段(比如命名为TextBoxCount),把它放在所有问题的最前面,用来存我们统计的填写过的文本框数量。
步骤2:在目标页面添加统计逻辑(无需冗余页面)
找到包含前两个需要统计的问题的页面(如果两个问题在不同页面,就选第二个问题所在的页面),给这个页面添加页面级JavaScript:
Qualtrics.SurveyEngine.addOnPageSubmit(function() { // 替换这里的QID1和QID2为你实际的两个问题的QID const q1TextInputs = document.querySelectorAll('#QID1 .InputText'); const q2TextInputs = document.querySelectorAll('#QID2 .InputText'); let filledTextBoxes = 0; // 统计第一个问题中填写了内容的文本框 q1TextInputs.forEach(input => { if (input.value.trim() !== '') filledTextBoxes++; }); // 统计第二个问题中填写了内容的文本框 q2TextInputs.forEach(input => { if (input.value.trim() !== '') filledTextBoxes++; }); // 把统计结果存入嵌入式数据,后面第三个问题会用到 Qualtrics.SurveyEngine.setEmbeddedData('TextBoxCount', filledTextBoxes); });
这段代码会在用户提交当前页面(也就是进入第三个问题之前)自动统计两个问题里有填写内容的文本框数量,把结果存在我们之前创建的嵌入式数据里。
步骤3:控制第三个问题的显示内容
接下来给第三个问题添加问题级JavaScript,读取嵌入式数据里的统计结果,动态调整显示内容:
Qualtrics.SurveyEngine.addOnload(function() { const count = parseInt(Qualtrics.SurveyEngine.getEmbeddedData('TextBoxCount')); const currentQuestion = this; // 根据统计数量自定义显示逻辑,这里举两个例子: if (count >= 2) { // 修改问题文本 currentQuestion.setQuestionText(`你一共填写了${count}个文本框,这是对应内容A`); // 或者显示/隐藏特定选项组(替换ChoiceGroup1/2为你实际的选项组类名) document.querySelector('#QID3 .ChoiceGroup1').style.display = 'block'; document.querySelector('#QID3 .ChoiceGroup2').style.display = 'none'; } else { currentQuestion.setQuestionText(`你一共填写了${count}个文本框,这是对应内容B`); document.querySelector('#QID3 .ChoiceGroup1').style.display = 'none'; document.querySelector('#QID3 .ChoiceGroup2').style.display = 'block'; } });
注意事项
- 一定要把代码里的
QID1、QID2、QID3替换成你问卷中实际的问题ID(每个问题的QID可以在问题设置里找到)。 - 如果前两个问题和第三个问题在同一个页面,那把第一步的代码改成页面的
addOnReady事件,而不是addOnPageSubmit,这样页面加载时就会实时统计并更新第三个问题的显示。
这样操作下来,完全不需要那个冗余的中间页面,逻辑也更清晰,还能适配Qualtrics的最新版本。
内容的提问来源于stack exchange,提问作者bcarothers
相关产品推荐
相关产品推荐

