Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript getElementsByClassName有问题_Javascript - Fatal编程技术网

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输入时都会运行它。这里有一个演示供你们两人回顾,在投票否决答案之前,你们至少应该阅读说明书。