Javascript getElementsByClassName有问题
以下代码是导致问题的原因:Javascript getElementsByClassName有问题,javascript,Javascript,以下代码是导致问题的原因: var CheckBoxes = document.getElementsByClassName('DeleteCheckBox') for (var i = 0; i < CheckBoxes.length; i++) { CheckBoxes[i].checked = false; } var checkbox=document.getElementsByClassName('DeleteCheckBox')) 对于(变量i=0;
var CheckBoxes = document.getElementsByClassName('DeleteCheckBox')
for (var i = 0; i < CheckBoxes.length; i++) {
CheckBoxes[i].checked = false;
}
var checkbox=document.getElementsByClassName('DeleteCheckBox'))
对于(变量i=0;i
那么,在运行之后,复选框仍然处于选中状态。它运行,因为我检查了I变量,它正在计数 这里怎么了?顺便说一下,只有复选框具有“DeleteCheckBox”类,因此只有复选框由getElementsByClassName返回 已解决: 我发现了问题所在。我使用的是asp.net,框架似乎将类分配给复选框的“标签”(它创建了一个span标记),而不是输入
使用InputAttribute.Add(“类”、“删除复选框”)修复;(asp.net codebehind)如果您复制粘贴了代码:';'上缺少-建议您使用console.log检查问题所在[选择时代码是否实际运行或错误] 我想尝试一下,因为我没有时间写完整的演示。getElementsByClassName创建一个称为HTMLcollection的东西。HTML集合是活动列表,这意味着每次访问它们时,它们都会重新运行用于生成集合的查询 每次更新checked属性时,都会运行GetElementsByCassName并生成一个新集合。因此,如果有10个输入框,那么您可以使用这个类删除一个,现在有9个,并且变量更新为9。如果将其更改为getElementsByTagName(“输入”),则此方法将起作用,因为当重新运行查询时,没有任何更改。但是,您可能不想点击页面上的每个输入。此外,由于您构建循环的方式,性能仍然会非常糟糕 在这里阅读更多 下面是如何重构并使其运行速度加快1000%,它应该像您所期望的那样“工作”
var inputs = document.getElementsByClassName('DeleteCheckBox'),
l = inputs.length;
while( l-- ) {
inputs[ l ].checked = false;
}
在每次迭代中,输入变量都会被更新为一个新的数字,但由于您正在倒计时,这应该很好。您的代码非常好。在网页上,右键单击并检查源代码。如果您没有看到
,那么您看错了地方。JS代码假定类DeleteCheckBox应用于复选框。修复您的标记。它看起来应该可以工作-您确定问题出在GetElementsByCassName()上吗?如果您使用document.getElementsByTagName('input'),它可以工作吗?您能演示一下这个“不工作”吗?好的,复选框仍然处于选中状态…是的,它可以通过使用document工作。getElementsByTagName('input')在这里工作正常:第一行末尾缺少的分号不会导致任何问题。这是完全不正确的。该列表在任何意义上都不是您描述的“活动”列表。您很幸运正在缓存该值,然后更改缓存的值。否则,它将无法工作,因为inputs.length
不会更改(因为节点不会移动到任何地方)。HTMLcollection会更改,值l不会更改缓存的b/c和inputs.length不会更改b/c我不会删除类名。然而,getElementsByClassName确实正在运行,每次访问循环b/c输入时都会运行它。这里有一个演示供你们两人回顾,在投票否决答案之前,你们至少应该阅读说明书。