Uncaught TypeError读取'type'报错 获取勾选复选框对应最小值失败如何解决
问题原因
- 你调用
table.getElementsByTagName("tr")获取到的行包含了<thead>中的表头行,最终得到的trs长度为5(1行表头+4行数据),但通过.myCheckbox类选择器筛选出来的复选框只有4个,仅对应4行数据。 - 循环执行到
i=4时,ele[4]为undefined,读取undefined的type属性就会抛出你遇到的报错。 - 补充:你的代码中多个复选框重复使用了相同的
id="include",HTML规范中id属性需要全局唯一,建议修改避免后续出现其他定位问题。
修正方案
推荐直接遍历筛选到的复选框,再向上查找对应行的数值,逻辑更稳妥:
function smallestWeight() { let values = []; const checkboxes = document.querySelectorAll(".myCheckbox"); // 直接遍历所有匹配的复选框 checkboxes.forEach(checkbox => { if (checkbox.checked) { // 找到当前复选框所在的tr行,取第一列的数值 const currentTr = checkbox.closest('tr'); values.push(parseFloat(currentTr.cells[0].innerHTML)); } }) // 求最小值的逻辑 if (values.length > 0) { const minVal = Math.min(...values); console.log('最小数值是:', minVal); } } const btn = document.getElementById("click"); btn.addEventListener("click", function() { smallestWeight(); })
如果要保留原有循环逻辑,仅修改获取tr的方式,只拿tbody内的行即可:
// 替换原代码中获取trs的语句 let trs = table.querySelector('tbody').getElementsByTagName("tr");
内容的提问来源于stack exchange,提问作者vauss
相关产品推荐
相关产品推荐

