Qualtrics联合实验JS代码报错:Unexpected token )求排查
问题分析与修复方案
错误原因
你遇到的Unexpected token )报错,核心是两个语法问题:
- 字符串跨换行未处理:
veggieArray里的"Bean sprouts"被拆成两行,JavaScript不允许字符串直接换行(无转义),导致字符串未闭合,触发语法错误。 - 循环变量未声明:
for循环中的i未用var/let声明,会隐式成为全局变量,虽不直接触发当前报错,但不符合代码规范。
修正后的完整代码
Qualtrics.SurveyEngine.addOnload(function() { // 设置选项数量 var numChoice = 5; // 存储所有属性水平的数组 var breadArray = ["Bagel", "Hero", "Roll", "Sliced white", "Tortilla", "Lettuce wrap"]; var cheeseArray = ["Cheddar", "Gouda", "Jack", "Mozzarella", "Provolone", "None"]; var greenArray = ["Arugala", "Green lettuce", "Red lettuce", "Spinach"]; var meatArray = ["Ham", "Roast beef", "Turkey", "Portobello", "Egg", "Bean patty"]; var sauceArray = ["Hot sauce", "Mayonnaise", "Mustard", "Oil and vinegar", "None"]; var veggieArray = ["Tomato", "Jalapenos", "Roasted peppers", "Onion", "Olives", "Bean sprouts", "Pickles", "Avocado"]; // Fisher-Yates 洗牌算法 function shuffle(array) { for (var i = array.length - 1; i > 0; i--) { var j = Math.floor(Math.random() * (i + 1)); var temp = array[i]; array[i] = array[j]; array[j] = temp; } return array; } // 洗牌数组并返回第一个元素 function shuffle_one(theArray) { var out = shuffle(theArray); out = out[0]; return out; }; // 执行随机化并保存结果 for (var i = 1; i <= numChoice; i++) { Qualtrics.SurveyEngine.setEmbeddedData("choice" + i + "_bread1", shuffle_one(breadArray)); Qualtrics.SurveyEngine.setEmbeddedData("choice" + i + "_bread2", shuffle_one(breadArray)); Qualtrics.SurveyEngine.setEmbeddedData("choice" + i + "_cheese1", shuffle_one(cheeseArray)); Qualtrics.SurveyEngine.setEmbeddedData("choice" + i + "_cheese2", shuffle_one(cheeseArray)); Qualtrics.SurveyEngine.setEmbeddedData("choice" + i + "_green1", shuffle_one(greenArray)); Qualtrics.SurveyEngine.setEmbeddedData("choice" + i + "_green2", shuffle_one(greenArray)); Qualtrics.SurveyEngine.setEmbeddedData("choice" + i + "_meat1", shuffle_one(meatArray)); Qualtrics.SurveyEngine.setEmbeddedData("choice" + i + "_meat2", shuffle_one(meatArray)); Qualtrics.SurveyEngine.setEmbeddedData("choice" + i + "_sauce1", shuffle_one(sauceArray)); Qualtrics.SurveyEngine.setEmbeddedData("choice" + i + "_sauce2", shuffle_one(sauceArray)); Qualtrics.SurveyEngine.setEmbeddedData("choice" + i + "_veggie1", shuffle_one(veggieArray)); Qualtrics.SurveyEngine.setEmbeddedData("choice" + i + "_veggie2", shuffle_one(veggieArray)); } });
关键修正点
- 合并
veggieArray中拆分的"Bean sprouts"为完整字符串,解决字符串未闭合的核心语法错误。 - 在
for循环中添加var声明变量i,避免全局变量污染。 - 移除代码中多余的空格,提升可读性,不影响功能。
- 简化
shuffle_one函数的return语句,去掉不必要的括号。
内容的提问来源于stack exchange,提问作者Santiago99
相关产品推荐
相关产品推荐

