Qualtrics旧按键响应脚本失效,无法保存至SPSS数据,求更新方案
关于Qualtrics按键响应脚本失效的解决方案
Hey Koen, great question—let’s tackle this head-on!
First off, you’re absolutely right that Qualtrics has updated its JavaScript API over the years, which is why those older scripts aren’t working as expected anymore. Here’s what’s going wrong and how to fix it:
为什么旧脚本失效?
- 旧脚本依赖的
Event.observe和Event.stopObserving是Qualtrics曾经使用的Prototype.js库方法,现在已经被弃用,Qualtrics更推荐使用原生JavaScript的事件处理方式(addEventListener/removeEventListener)。 setChoiceValue方法的行为也有调整:仅仅调用它不再能保证响应被保存到调查数据中,尤其是在没有显式标记问题为已完成或触发数据提交的情况下。- 对于user1113568的脚本:它只设置了选项值,但没有将响应保存到嵌入式数据,也没有确保问题响应被持久化。除非该问题本身被包含在数据导出中,否则不会出现在SPSS文件里。
- 对于D. Sam的脚本:虽然尝试设置嵌入式数据,但可能没有正确触发数据提交,导致值从未发送到Qualtrics服务器。
更新后的工作脚本
1. 保存按键响应到嵌入式数据(对应D. Sam的需求)
这个脚本会捕获按键操作,将值保存到嵌入式数据字段,标记问题为已回答,并自动跳转下一页:
Qualtrics.SurveyEngine.addOnload(function() { // 隐藏导航按钮,强制用户通过按键输入 this.hideNextButton(); this.hidePreviousButton(); const surveyInstance = this; function handleKeyPress(e) { let choiceID = null; // 按键映射到选项ID(可根据需求调整) switch (e.keyCode) { case 74: // 'j'键 choiceID = 1; break; case 75: // 'k'键 choiceID = 2; break; } if (choiceID) { // 移除事件监听,避免重复触发 document.removeEventListener('keydown', handleKeyPress); // 保存值到嵌入式数据(确保你已在调查流程中添加这个字段!) Qualtrics.SurveyEngine.setEmbeddedData("choiceID", choiceID); // 显式提交数据到Qualtrics服务器(这是数据持久化的关键步骤) Qualtrics.SurveyEngine.submitData(); // 标记对应选项为选中状态(可选,用于视觉反馈) surveyInstance.setChoiceValue(choiceID, true); // 自动跳转到下一页 surveyInstance.clickNextButton(); } } // 使用原生事件监听替代Prototype.js方法 document.addEventListener('keydown', handleKeyPress); });
2. 保存按键响应到问题选项(对应user1113568的需求,无需嵌入式数据)
如果你不需要嵌入式数据,只想将选项选择保存到问题响应(会出现在SPSS导出中),可以使用这个版本:
Qualtrics.SurveyEngine.addOnload(function() { this.hideNextButton(); this.hidePreviousButton(); const surveyInstance = this; function handleKeyPress(e) { let choiceID = null; switch (e.keyCode) { case 74: // 'j'键 choiceID = 1; break; case 75: // 'k'键 choiceID = 2; break; } if (choiceID) { document.removeEventListener('keydown', handleKeyPress); // 设置选项为选中状态 surveyInstance.setChoiceValue(choiceID, true); // 标记问题为有效/已回答(确保响应被保存到数据) surveyInstance.setQuestionValid(true); // 自动跳转下一页 surveyInstance.clickNextButton(); } } document.addEventListener('keydown', handleKeyPress); });
关键注意事项
- 嵌入式数据配置:使用第一个脚本时,务必在调查的「调查流程」中(点击“添加新元素”>“嵌入式数据”)添加
choiceID字段,且要放在运行该脚本的问题之前,否则数据无法被存储。 - 数据导出设置:导出到SPSS时,要确认已勾选对应的嵌入式数据字段(对应脚本1)或问题响应字段(对应脚本2)。
- 测试建议:始终在Qualtrics预览模式下测试,并用浏览器开发者工具(F12)检查JavaScript错误,这能帮你快速排查拼写错误或配置问题。
- 选项ID匹配:确认脚本中的
choiceID值与问题选项的实际ID一致(可在问题的“选项设置”中查看)。
内容的提问来源于stack exchange,提问作者Koen
相关产品推荐
相关产品推荐

