以下代码导致问题:
var CheckBoxes = document.getElementsByClassName('DeleteCheckBox')
for (var i = 0; i < CheckBoxes.length; i++) {
CheckBoxes[i].checked = false;
}
嗯,此次运行后仍然会选中复选框。它运行,因为我检查了i变量,它正在计数。
这里有什么问题?顺便说一句,只有复选框有“DeleteCheckBox”类,因此getElementsByClassName只返回复选框。
解决:
我发现了问题。我正在使用asp.net,框架似乎将类分配给复选框的“标签”(它创建一个span标签),而不是输入。
使用InputAttributes.Add(“class”,“DeleteCheckBox”)修复; (asp.net codebehind)
答案 0 :(得分:1)
你的代码非常好。在网页上,右键单击并检查源。如果您没有看到<input type="checkbox" class="DeleteCheckBox" ...>
,那么您正在查找错误的地方。您的JS代码假定类DeleteCheckBox应用于复选框。修复你的标记。
答案 1 :(得分:0)
好吧,如果你复制粘贴代码:';'缺少 - 建议您使用console.log来检查问题所在[在选择时代码是否运行或是他们的错误]。
答案 2 :(得分:-1)
由于我没有时间编写完整的演示版,我正在考虑这个问题。 getElementsByClassName创建一个称为HTMLcollection的东西。 HTML集合是实时列表,这意味着每次访问它们时,它们都会重新运行用于生成集合的查询。
每次更新checked属性时,都会运行getElementsByClassName并生成一个新集合。因此,如果有10个输入框,则删除一个此类,现在有9个,变量更新为9.如果将此更改为getElementsByTagName('input'),此方法将起作用,因为当重新运行查询时没有任何更改。但是,您可能不希望点击页面上的每个输入。此外,由于您构建循环的方式,性能仍然很糟糕。
在这里阅读更多内容 https://developer.mozilla.org/en/DOM/HTMLCollection
以下是如何重构并使其运行速度提高1000%并且它应该像您期望的那样“正常工作”
var inputs = document.getElementsByClassName('DeleteCheckBox'),
l = inputs.length;
while( l-- ) {
inputs[ l ].checked = false;
}
在每次迭代中,输入变量将更新为新数字,但由于你倒计时这应该没问题。