如何禁用通过template模板动态添加的删除按钮数组?
问题原因
你代码中存在变量赋值逻辑错误,是删除按钮无法禁用的直接原因:
你写的var wala = document.getElementsByClassName("minus").length是将wala赋值为删除按钮的总数量(数字类型),后续循环中访问wala[i]本质是访问数字的索引属性,无法获取到按钮节点,自然没法设置禁用状态。你之前能拿到正确的按钮数量,是因为你直接读取了集合的length属性,只是错误把长度值赋值给了用来遍历的变量,才导致后续操作失效。
修复方案
修正finalCheck函数中遍历删除按钮的部分即可:
function finalCheck() { document.getElementById("review-button").disabled = true; document.getElementById("add").disabled = true; document.getElementById("wala").disabled = true; // 修正:先获取所有删除按钮的节点集合,再用集合长度做循环边界 const deleteBtns = document.getElementsByClassName("minus"); for(let i = 0; i < deleteBtns.length; i++){ deleteBtns[i].disabled = true; } // 后续原有逻辑保持不变 var final = document.getElementById("last-check").content; var copy = document.importNode(final,true); document.getElementById("bigGuy").appendChild(copy); var totalHours = 0; for (i = 0; i < content.length; i++){ totalHours = totalHours + content[i][3]; console.log(totalHours); } document.getElementById("total-hours").innerHTML = totalHours; }
可选简化写法(forEach版)
getElementsByClassName返回的是HTMLCollection类型,转成数组后可以直接用forEach遍历,不需要手动写循环:
// 禁用所有删除按钮 Array.from(document.getElementsByClassName("minus")).forEach(btn => btn.disabled = true) // 用户选择No需要恢复按钮可用时,执行以下代码 Array.from(document.getElementsByClassName("minus")).forEach(btn => btn.disabled = false)
内容的提问来源于stack exchange,提问作者Finrod
相关产品推荐
相关产品推荐

