c# - 当计数超过最大限制时,取消选中第一个选中的复选框

标签 c# javascript asp.net checkbox checkboxlist

我有一个 CheckBoxList ,我的要求是允许用户最多选择三个选项(通过 Javascript),一旦他点击第四个选项,第一个选择的 CheckBox 被取消选中,类似地,当他选择第五个(另一个)时,第二个选择的 CheckBox 也被取消选中,依此类推。最终用户只剩下三个选定的选项。

例如。 在给定的图像中,如果用户选择 .Net(第一)、Java(第二)、PHP(第三),并且当他选择 SQL(第四)时,.Net 将被取消选中,而 SQL 将被选中检查过。此外,当他选择云计算(第五)时,Java 未被选中。

enter image description here

我编写了以下 Javascript,它适用于第一种情况,并且在选择第四个项目时取消选中第一个选定项目,但它无法进一步工作,因为 counter 值再次达到 4并且 cbArray[counter - 4] 再次尝试取消选中第一个框而不是第二个框。如何解决这个问题。谢谢。

我的Javascript:

<script type="text/javascript" language="javascript">
        function limitChecked(maxCount) {
            debugger;
            var ocbList = document.getElementById('cbList');
            var cbArray = ocbList.getElementsByTagName('input');
            var counter = 0;
            for (var i = 0; i < cbArray.length; i++) {
                if (cbArray[i].checked==true) {
                    counter++;
                    if (counter > maxCount) {
                           cbArray[counter - 4].checked = false;
                    }
                }
            }
        }
</script>

.aspx 代码:

<body>
    <form id="form1" runat="server">
    <div>
        Courses:
        <asp:CheckBoxList ID="cbList" runat="server" onclick="limitChecked(3)">
            <asp:ListItem>.Net</asp:ListItem>
            <asp:ListItem>Java</asp:ListItem>
            <asp:ListItem>PHP</asp:ListItem>
            <asp:ListItem>SQL</asp:ListItem>
            <asp:ListItem>Cloud Computing</asp:ListItem>
        </asp:CheckBoxList>
    </div>
    </form>
</body>

最佳答案

根据 Trendy 的建议(McGarnagle 的回答也有帮助),我想出了这个解决方案,这对我来说效果很好。

function limitChecked(maxCount) {
            debugger;
            var ocbList = document.getElementById('cbList');
            var cbArray = ocbList.getElementsByTagName('input');
            var checkedArray = [];
            for (var i = 0; i < cbArray.length; i++) {
                if (cbArray[i].checked == true) {
                    checkedArray.push(i);
                    if (checkedArray.length > maxCount) {
                        checkedArray = checkedArray.slice(0);
                        cbArray[checkedArray[0]].checked = false;
                    }
                }
            }
        }

关于c# - 当计数超过最大限制时,取消选中第一个选中的复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17892323/

相关文章:

c# - 难以使用 JQuery 设置自定义 DDL 的值

c# - Windows Azure 表存储中的批量删除

javascript - 使用 let 变量而不是使用全局变量

javascript - 仅在某些页面上执行 jquery 效果/操作

javascript - 将一个 div 设置为一个数组,这样我就可以根据按钮使事物消失/重新出现

c# - 在 ASP.NET 中处理 session 状态

css - 在 MVC 元素中隐藏鼠标悬停的超链接

c# - 将 Azure 数据库与 Windows 窗体应用程序结合使用的最佳方式

c# - 转换动态 Dapper 查询

c# - 根据类型反序列化json字符串