Qualtrics矩阵问题取值时触发TypeError错误求助
Qualtrics矩阵问题取值时触发TypeError错误求助
我来帮你分析下这个问题~你碰到的TypeError: Cannot read properties of null (reading 'val')错误,本质是代码找不到要获取值的DOM元素,调用.val()时才会报错。大概率是手动构造的DOM选择器不对,或者代码触发时机有问题,下面给你两个靠谱的修复方案:
方案一:使用Qualtrics官方API获取数据(优先推荐)
直接操作DOM很容易因为Qualtrics页面结构更新而失效,用官方提供的SurveyEngine API获取答案会稳定很多。你可以把代码改成这样:
Qualtrics.SurveyEngine.addOnPageSubmit(function() { var partyNames = [ "Party A", "Party B", "Party C", "Party D", "Party E", "Party F", "Party G" ]; var ratings = []; // 获取当前矩阵题的所有响应数据 var questionResponses = this.getQuestionData().responses; // 遍历每个政党对应的选项(矩阵题的行索引从1开始) for(var i = 0; i < partyNames.length; i++) { var rowId = (i + 1).toString(); var rating = parseInt(questionResponses[rowId]); // 避免无效值影响后续排序 if(!isNaN(rating)) { ratings.push({ party: partyNames[i], rating: rating }); } } // 按评分降序排序 ratings.sort(function(a, b) { return b.rating - a.rating; }); // 把排序后的政党存入嵌入式数据 for(var j = 0; j < ratings.length; j++) { Qualtrics.SurveyEngine.setEmbeddedData("SortedParty_" + (j + 1), ratings[j].party); } });
改动说明:
- 把
addOnUnload换成addOnPageSubmit:确保在页面提交时获取数据,此时问题元素还未被销毁,API调用更可靠 - 用
this.getQuestionData().responses直接获取矩阵题的所有答案:不用再手动猜测DOM元素的ID/name,完全适配Qualtrics的内部结构 - 增加
isNaN检查:防止获取到无效的评分值,避免后续排序逻辑出问题
方案二:修正DOM选择器(适合坚持用原生DOM操作的场景)
如果你还是想用jQuery获取元素,得用正确的选择器。Qualtrics矩阵题的每个选项输入框的name属性格式是QR~QIDxx~行号,可以修改代码里的取值部分:
// 替换原来的Capture Ratings部分代码 for (var i = 0; i < partyNames.length; i++) { // 通过name属性定位输入框 var ratingInput = $('input[name="QR~QID22~' + (i+1) + '"]'); // 先检查元素是否存在再取值 if(ratingInput.length > 0) { var rating = parseInt(ratingInput.val()); ratings.push({ party: partyNames[i], rating: rating }); } }
同样建议把addOnUnload换成addOnPageSubmit,避免页面卸载时元素已被移除导致的问题。
备注:内容来源于stack exchange,提问作者Will
相关产品推荐
相关产品推荐

