限制从CheckboxList中选择的选项数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了限制从CheckboxList中选择的选项数相关的知识,希望对你有一定的参考价值。

我试图只允许用户从具有12个选项的复选框列表中选择5个选项。我添加了此代码,但用户可以根据需要选择。

这是我的完整语法。

为什么这不是我想要的警报?

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
       <script type="text/javascript">
        var limit = 5;
        $(function () { 
        $('[id*="cbxlTestInputAmt"]').on('change', function (evt) {
            if ($('[id*="cbxlTestInputAmt"]:checked').length > limit) {
                this.checked = false;
                alert('cannot select more than ' + limit);
            }
        });
        });
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>    
        <asp:CheckBoxList ID="cbxlTestInputAmt" runat="server" RepeatLayout="table" RepeatColumns="2" RepeatDirection="vertical"></asp:CheckBoxList>    
    </div>
    </form>
</body>
</html>

我在数据库后面的C#代码中填充了我的复选框列表。我认为这就是JQuery不适合我的原因。

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        DataTable dt = new DataTable();
        using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLString1"].ConnectionString))
        {
            SqlDataAdapter ad = new SqlDataAdapter("Select X FROM OIKJC ORDER BY ID ASC", conn);
            ad.Fill(dt);
        }
        cbxlTestInputAmt.DataSource = dt;
        cbxlTestInputAmt.DataTextField = "X";
        cbxlTestInputAmt.DataValueField = "X";
        cbxlTestInputAmt.DataBind();
    }
}

编辑2 这是页面源

    <!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>

</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js" type="text/javascript"></script>
</head>
<body>
    <form method="post" action="./StJudes" id="form1">
<div class="aspNetHidden">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/arN4mVK5SbGdvL+R7WrYMRnz8V5l4JL9V3Mni0wMrfoNV8HdxGgfuGLcsQDI0QcQeB6J8U7mUzXSzGMKyLlJ/aalb0tRLilgRH6mlf+ZTGC8f8NBCIb0Bqhs/nU7dyk10ZeZxyc6US362rQdf2I507YnK8EcAXrTQuUir4mMyh+k06tUlLZeA6NHntT45j7vnUsboHm0wCzhuW9B6Kw9QTgoB5XnbsmLTxsAPmvpNCI7ATtIfX6pF1hf/1WkrkN0tYmKA3MX+Uq2N2gXwnZFx73mxAAbpSFcx7P8kIdNlBze3XwgzCHL9qJRujTxxlnbcnwrw00drXudPbiZvKFL7f2Hnfe0xs+k6WOx962kiF0sHyvNhLBC3o4yqfV3tzdcNpCbt/YlUYJP5LkVJ4k7rmr638IMr021fgYGLhRxff70NKwBNKrkUflk/ZpoY8oMLciB3AZPq4x7ob0WAa7l4HGlWEusMCxsiW0i3/VMFLnS/VtmoJIdcRGrbwjbGNq1EvnCyh32oCvgO/kmzlMVCVOtpZhNR+SBpdQW4dIhkBCCKQHReV8YPK0OF13hEHAekgFuXw5SsTok8dGtLUnDXoy1DOxbe3AV6wpdTzuDvQfsgJYEiV1mUn1k35E4pz4+dLNK7RtjM4nId0jnj6Rpfgpke743BNmwr7prkcbMoBz44Rf3K+Ov2+UlMj3mXYWvREGBmAUWAqvRuHu373uZ6JyjHY0lg7Ui+5fGGkyrBezZFHgoSRu/xmPP9em0myqagVQxKZHXOGHsPwBd2+ZHl5hsC/eO21X3SxGJmoc6PO1Grns5X0oSNv3moG/J+7ZfU6LWJobDZ4cJkMa3KjgB5+ymRm2AjoIQwkwCI9SOAe4g0NLMaOdYCJ/VVgfGEgdgTyN/qM9owibjyXNQEtHH/gpMv1bNZ5jHZzc0LOZEG7KltJ4PMdVyAjwpV3wR9Q1Yz6/YBE0rYYM7+cMcMFgqvkmggMZ/EiCSB/NWcpkl4Ljrs9C6xcF6Rh51W56Ddf2C5ZEIhrE3KCOHDWlr3pj9zF7CIyGVIpwtsTTCQfCL7QjlIw5u2vd4HvlfrdYrErv/ezDXrTMErkQnpfaQRpwi4zLOCZKQ9Qd2SYGaKZsDdN6foV7iBPH5TABi2r8SUUHotDlWD8bYbntUAlTVhJ1e5amY7RgzWNVPhlsTLIfFF5vwQAW0Qg9BSUTKOtx1A5dssTY9iUlVa+gJDjfEohvLcO9Qtym8As+OA2tBCJ/2jQyhGgo+prm1S+MVGTVuItm" />
</div>

    <div>    
        <table id="cbxlTestInputAmt">
    <tr>
        <td><input id="cbxlTestInputAmt_0" type="checkbox" name="cbxlTestInputAmt$0" value="Choice 1" /><label for="cbxlTestInputAmt_0">Choice 1</label></td><td><input id="cbxlTestInputAmt_8" type="checkbox" name="cbxlTestInputAmt$8" value="Choice 5" /><label for="cbxlTestInputAmt_8">Choice 5</label></td>
    </tr><tr>
        <td><input id="cbxlTestInputAmt_1" type="checkbox" name="cbxlTestInputAmt$1" value="Choice 2" /><label for="cbxlTestInputAmt_1">Choice 2</label></td><td><input id="cbxlTestInputAmt_9" type="checkbox" name="cbxlTestInputAmt$9" value="Choice 6" /><label for="cbxlTestInputAmt_9">Choice 6</label></td>
    </tr><tr>
        <td><input id="cbxlTestInputAmt_2" type="checkbox" name="cbxlTestInputAmt$2" value="Choice 3" /><label for="cbxlTestInputAmt_2">Choice 3</label></td><td><input id="cbxlTestInputAmt_10" type="checkbox" name="cbxlTestInputAmt$10" value="Choice 7" /><label for="cbxlTestInputAmt_10">Choice 7</label></td>
    </tr><tr>
        <td><input id="cbxlTestInputAmt_3" type="checkbox" name="cbxlTestInputAmt$3" value="Choice 4" /><label for="cbxlTestInputAmt_3">Choice 4</label></td><td><input id="cbxlTestInputAmt_11" type="checkbox" name="cbxlTestInputAmt$11" value="Choice 8" /><label for="cbxlTestInputAmt_11">Choice 8</label></td>
    </tr><tr>
    </tr>
</table>    
    </div>

<div class="aspNetHidden">

    <input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="EAAE48E8" />
    <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="Sy90TVaOKW0SPZaQc4kBfWFelyOefK2WoFykp7mXwf8t1tCQ1rpzVdnpgLuNxUsSq4LLnzDYvh5HpOvi781XrWO2QN3jsMS0nwr+2o8Qq5CSde1phnI9bO5cNFwJLytC54FG6o/Uv4AbjSKIvZ5hsmWRfu0AtPCuFsgeJXK3nkJI++SHHLuvdqc3dkJYCyzFY8ls6ton28qjRu1LfvTN40WIGxqe+XODIS5UEeFpj3eAbjN4vZnO9rAkE3mGOscT50S201BcFZQNRvzJMEDYe2lXadzzxCWP2P5456Q18+P3A9DPlZheRW6yTNdiUM1HUoZXpMjtR0+8nbnDnCBv4TNcjSdUCKz2hOWuuESysZr5u52LKxZFKQKXFpQVwLjm4GiNRSs03ERpdikPXXMH1Wg1j8SrK5eYkZiGO+DMBciiv3nud//ZiRZeeUcn14Mj" />
</div></form>
    <script type="text/javascript">
           var limit = 5;
           $(function () {
               $('#form1').on('change', '[id="cbxlTestInputAmt"]', function (evt) {
                   if ($('[id="cbxlTestInputAmt"]:checked').length > limit) {
                       this.checked = false;
                       alert('cannot select more than ' + limit);
                   }
               });
           });
    </script>

<!-- Visual Studio Browser Link -->
<script type="application/json" id="__browserLink_initializationData">
    {"appName":"Chrome","requestId":"fc04a78059374a078423b035a01ea2a7"}
</script>
<script type="text/javascript" src="http://localhost:60326/3217fe137445440cbce21c780fe62311/browserLink" async="async"></script>
<!-- End Browser Link -->

</body>
</html>
答案

尽管您发布的服务器端代码指示了带有*=限定符的属性选择器,但您发布的呈现源代码显示了两个检查相等性的id选择器:

[id="cbxlTestInputAmt"]

当我将它们更改为:

[id*="cbxlTestInputAmt"]

代码可以正常工作。

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>

</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js" type="text/javascript"></script>
</head>
<body>
    <form method="post" action="./StJudes" id="form1">
<div class="aspNetHidden">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/arN4mVK5SbGdvL+R7WrYMRnz8V5l4JL9V3Mni0wMrfoNV8HdxGgfuGLcsQDI0QcQeB6J8U7mUzXSzGMKyLlJ/aalb0tRLilgRH6mlf+ZTGC8f8NBCIb0Bqhs/nU7dyk10ZeZxyc6US362rQdf2I507YnK8EcAXrTQuUir4mMyh+k06tUlLZeA6NHntT45j7vnUsboHm0wCzhuW9B6Kw9QTgoB5XnbsmLTxsAPmvpNCI7ATtIfX6pF1hf/1WkrkN0tYmKA3MX+Uq2N2gXwnZFx73mxAAbpSFcx7P8kIdNlBze3XwgzCHL9qJRujTxxlnbcnwrw00drXudPbiZvKFL7f2Hnfe0xs+k6WOx962kiF0sHyvNhLBC3o4yqfV3tzdcNpCbt/YlUYJP5LkVJ4k7rmr638IMr021fgYGLhRxff70NKwBNKrkUflk/ZpoY8oMLciB3AZPq4x7ob0WAa7l4HGlWEusMCxsiW0i3/VMFLnS/VtmoJIdcRGrbwjbGNq1EvnCyh32oCvgO/kmzlMVCVOtpZhNR+SBpdQW4dIhkBCCKQHReV8YPK0OF13hEHAekgFuXw5SsTok8dGtLUnDXoy1DOxbe3AV6wpdTzuDvQfsgJYEiV1mUn1k35E4pz4+dLNK7RtjM4nId0jnj6Rpfgpke743BNmwr7prkcbMoBz44Rf3K+Ov2+UlMj3mXYWvREGBmAUWAqvRuHu373uZ6JyjHY0lg7Ui+5fGGkyrBezZFHgoSRu/xmPP9em0myqagVQxKZHXOGHsPwBd2+ZHl5hsC/eO21X3SxGJmoc6PO1Grns5X0oSNv3moG/J+7ZfU6LWJobDZ4cJkMa3KjgB5+ymRm2AjoIQwkwCI9SOAe4g0NLMaOdYCJ/VVgfGEgdgTyN/qM9owibjyXNQEtHH/gpMv1bNZ5jHZzc0LOZEG7KltJ4PMdVyAjwpV3wR9Q1Yz6/YBE0rYYM7+cMcMFgqvkmggMZ/EiCSB/NWcpkl4Ljrs9C6xcF6Rh51W56Ddf2C5ZEIhrE3KCOHDWlr3pj9zF7CIyGVIpwtsTTCQfCL7QjlIw5u2vd4HvlfrdYrErv/ezDXrTMErkQnpfaQRpwi4zLOCZKQ9Qd2SYGaKZsDdN6foV7iBPH5TABi2r8SUUHotDlWD8bYbntUAlTVhJ1e5amY7RgzWNVPhlsTLIfFF5vwQAW0Qg9BSUTKOtx1A5dssTY9iUlVa+gJDjfEohvLcO9Qtym8As+OA2tBCJ/2jQyhGgo+prm1S+MVGTVuItm" />
</div>

    <div>    
        <table id="cbxlTestInputAmt">
    <tr>
        <td><input id="cbxlTestInputAmt_0" type="checkbox" name="cbxlTestInputAmt$0" value="Choice 1" /><label for="cbxlTestInputAmt_0">Choice 1</label></td><td><input id="cbxlTestInputAmt_8" type="checkbox" name="cbxlTestInputAmt$8" value="Choice 5" /><label for="cbxlTestInputAmt_8">Choice 5</label></td>
    </tr><tr>
        <td><input id="cbxlTestInputAmt_1" type="checkbox" name="cbxlTestInputAmt$1" value="Choice 2" /><label for="cbxlTestInputAmt_1">Choice 2</label></td><td><input id="cbxlTestInputAmt_9" type="checkbox" name="cbxlTestInputAmt$9" value="Choice 6" /><label for="cbxlTestInputAmt_9">Choice 6</label></td>
    </tr><tr>
        <td><input id="cbxlTestInputAmt_2" type="checkbox" name="cbxlTestInputAmt$2" value="Choice 3" /><label for="cbxlTestInputAmt_2">Choice 3</label></td><td><input id="cbxlTestInputAmt_10" type="checkbox" name="cbxlTestInputAmt$10" value="Choice 7" /><label for="cbxlTestInputAmt_10">Choice 7</label></td>
    </tr><tr>
        <td><input id="cbxlTestInputAmt_3" type="checkbox" name="cbxlTestInputAmt$3" value="Choice 4" /><label for="cbxlTestInputAmt_3">Choice 4</label></td><td><input id="cbxlTestInputAmt_11" type="checkbox" name="cbxlTestInputAmt$11" value="Choice 8" /><label for="cbxlTestInputAmt_11">Choice 8</label></td>
    </tr><tr>
    </tr>
</table>    
    </div>

<div class="aspNetHidden">

    <input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="EAAE48E8" />
    <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="Sy90TVaOKW0SPZaQc4kBfWFelyOefK2WoFykp7mXwf8t1tCQ1rpzVdnpgLuNxUsSq4LLnzDYvh5HpOvi781XrWO2QN3jsMS0nwr+2o8Qq5CSde1phnI9bO5cNFwJLytC54FG6o/Uv4AbjSKIvZ5hsmWRfu0AtPCuFsgeJXK3nkJI++SHHLuvdqc3dkJYCyzFY8ls6ton28qjRu1LfvTN40WIGxqe+XODIS5UEeFpj3eAbjN4vZnO9rAkE3mGOscT50S201BcFZQNRvzJMEDYe2lXadzzxCWP2P5456Q18+P3A9DPlZheRW6yTNdiUM1HUoZXpMjtR0+8nbnDnCBv4TNcjSdUCKz2hOWuuESysZr5u52LKxZFKQKXFpQVwLjm4GiNRSs03ERpdikPXXMH1Wg1j8SrK5eYkZiGO+DMBciiv3nud//ZiRZeeUcn14Mj" />
</div></form>
    <script type="text/javascript">
           var limit = 5;
           $(function () {
               $('#form1').on('change', '[id*="cbxlTestInputAmt"]', function (evt) {
                   if ($('[id*="cbxlTestInputAmt"]:checked').length > limit) {
                       this.checked = false;
                       alert('cannot select more than ' + limit);
                   }
               });
           });
    </script>

<!-- Visual Studio Browser Link -->
<script type="application/json" id="__browserLink_initializationData">
    {"appName":"Chrome","requestId":"fc04a78059374a078423b035a01ea2a7"}
</script>
<script type="text/javascript" src="http://localhost:60326/3217fe137445440cbce21c780fe62311/browserLink" async="async"></script>
<!-- End Browser Link -->

</body>
</html>

以上是关于限制从CheckboxList中选择的选项数的主要内容,如果未能解决你的问题,请参考以下文章

如何取出GridView中的CheckBoxList控件所选择的值。

关于Yii2的checkboxList的初始选项设置问题

如何验证用户在 CheckBoxList 中选择了至少一个复选框?

总行数 + 限制选择

以编程方式选择winforms checkboxlist中的项目

如何获取通过 jQuery 选择 CheckBoxList 中的哪个复选框?