getElementsByClassName循环报错:selectedIndex未定义问题排查
解决"Cannot read property selectedIndex of undefined"报错问题
你的问题出在for循环的终止条件上!getElementsByClassName返回的是一个类数组对象,它的索引范围是从0到length-1。你写的i <= variazione.length会让循环最后一次执行时,i等于variazione.length,这时候variazione[i]就是undefined,自然就会抛出"Cannot read property selectedIndex of undefined"的错误。
修复后的基础代码
把循环条件改成i < variazione.length就能解决这个问题,同时还能简化lunghezza的赋值逻辑:
var variazione = document.getElementsByClassName("select-addition"); var base = 0; var lunghezza = variazione.length; // 直接取元素集合的长度,无需循环累加 for (var i = 0; i < variazione.length; i++) { if (variazione[i].selectedIndex === 1) { // 用===做严格相等判断更严谨 base++; } } if (base === lunghezza) { document.getElementById("info-add-on").style.display = "none"; } else { document.getElementById("info-add-on").style.display = "block"; }
更简洁的ES6+写法
如果你的项目环境支持ES6语法,还可以用数组方法大幅简化代码,可读性更强:
const allSelects = Array.from(document.getElementsByClassName("select-addition")); const allSelectedValue1 = allSelects.every(select => select.selectedIndex === 1); document.getElementById("info-add-on").style.display = allSelectedValue1 ? "none" : "block";
这里用Array.from把类数组转成真正的数组,再用every方法一次性判断所有select的选中项是否都符合要求,核心逻辑一行就能完成。
内容的提问来源于stack exchange,提问作者NastroAdesivo
相关产品推荐
相关产品推荐

