求助:Qualtrics中JavaScript实现Vignette随机分配遇问题
Qualtrics Vignette随机分配问题排查与解决
问题背景
作为Qualtrics JS新手,需将被试随机分配至16个(后续扩展至500+)vignette,计划通过嵌入数据字段指定vignette变量名,但遇到两个问题:
- 文本/图形问题的JS窗口运行预览显示
undefined - 富文本编辑器HTML视图中输入代码无法保存
原代码:
Qualtrics.SurveyEngine.addOnload(function() { // Get the value of the selected variable from embedded data var selectedVariable = "${e://Field/SelectedVariable}"; // Define the vignettes with their corresponding text var vignettes = { "aAA1BB1AB1BA1": "Text for vignette 1...", "aAA1BB1AB1BA0": "Text for vignette 2...", // Add more vignettes as needed }; // Get the text for the selected vignette based on the selected variable var selectedVignetteText = vignettes[selectedVariable]; // Set the text of the question to display the selected vignette this.getQuestionTextContainer().innerHTML = selectedVignetteText; });
问题1:预览显示undefined的解决
核心原因
- 直接使用
${e://Field/SelectedVariable}是错误的:Qualtrics模板语法不会在JS代码中自动解析,selectedVariable实际拿到的是字符串"${e://Field/SelectedVariable}"而非嵌入数据的真实值 - 嵌入数据字段
SelectedVariable可能未正确赋值、字段名拼写错误(区分大小写)
修复步骤
- 改用官方API获取嵌入数据:替换原获取变量的代码为:
var selectedVariable = Qualtrics.SurveyEngine.getEmbeddedData("SelectedVariable"); - 验证嵌入数据赋值:确保调查流程中已提前为
SelectedVariable赋值(比如通过随机逻辑生成变量名并存入嵌入数据),字段名完全匹配 - 添加容错处理:避免变量不存在时显示
undefined:var selectedVignetteText = vignettes[selectedVariable] || "加载失败,请重试";
问题2:富文本编辑器无法保存代码的解决
原因
Qualtrics富文本编辑器会自动清理内嵌JavaScript代码,不支持在HTML视图中保存JS逻辑
解决
所有JS代码必须放在对应问题的专属JavaScript编辑器中(点击问题设置的「JavaScript」按钮打开),不要在富文本HTML视图中添加JS
优化后的完整代码
Qualtrics.SurveyEngine.addOnload(function() { // 正确获取嵌入数据字段值 var selectedVariable = Qualtrics.SurveyEngine.getEmbeddedData("SelectedVariable"); // Vignette映射表 var vignettes = { "aAA1BB1AB1BA1": "Text for vignette 1...", "aAA1BB1AB1BA0": "Text for vignette 2...", // 批量添加更多vignette }; // 获取对应文本,添加默认容错 var selectedVignetteText = vignettes[selectedVariable] || "加载失败,请联系管理员"; // 更新问题显示文本 this.getQuestionTextContainer().innerHTML = selectedVignetteText; });
500+ Vignette扩展建议
- 不要在JS中硬编码大量vignette:将内容存入Qualtrics嵌入数据或问题库,通过批量导入维护,再动态拉取
- 随机分配逻辑前置:在调查入口Block中通过随机数生成变量名,存入
SelectedVariable嵌入数据,确保分配唯一性
内容的提问来源于stack exchange,提问作者Julia
相关产品推荐
相关产品推荐

