【发布时间】:2013-05-08 21:16:42
【问题描述】:
我有一个包含两个项目的复选框列表。我很难使用 JavaScript 在两个复选框列表项之间切换。我想点击一个,如果另一个已经被选中,复选标记应该会消失。以下是复选框列表的标记。
<asp:CheckBoxList ID="chkApplyLimits" runat="server" RepeatColumns="2" ClientIDMode="Static" onclick="CheckBoxToggle">
<asp:ListItem Text="Yes" Value="1"></asp:ListItem>
<asp:ListItem Text="No" Value="0"></asp:ListItem>
</asp:CheckBoxList>
我正在使用以下 JavaScript 函数来启用切换。在 JavaScript 中,我本质上是获取父元素的所有子元素,然后循环遍历它们以将所有子元素的选中属性设置为 false。最后,我将点击项的选中属性设置为 true。
function CheckBoxToggle(event) {
if (event.srcElement.type == 'checkbox') {
var childNodes = event.srcElement.parentNode.childNodes;
for (var i = 0; i < childNodes.length; i++) {
childNodes[i].setAttribute("checked", false);
}
event.srcElement.checked = true;
}
}
如果一开始什么都没有检查,这可以正常工作。但是,当我第二次单击时,两个复选框都被选中。有人可以指导我如何更改此设置,以便如果一个复选框已被单击,当我单击第二个复选框时它将变为未选中状态。
感谢任何帮助。
【问题讨论】:
-
如果您将
childNodes[i].setAttribute("checked", false)更改为childNodes[i].checked = false会怎样? -
结果是一样的。第一次工作正常,第二次失败。我认为无论您使用 childNodes[i].setAttribute("checked", false) 还是 childNodes[i].checked = false,整个 for 循环都没有做任何事情。
-
我也这么认为。但无法弄清楚问题可能是什么。由于可能与关键字发生冲突,我会尝试重命名变量 childNodes。但它可能不会解决问题。
-
试试看我的回答。
标签: asp.net checkboxlist