在列表框中设置已检查值的限制

时间:2016-09-06 14:11:53

标签: c# jquery asp.net

我有多个选择列表框,我想限制用户选择3个以上的值。值可以是国家或城市,它们来自数据库。它的代码用lstArea_SelectedIndexChanged方法编写。

<asp:ListBox ID="lstArea" runat="server" SelectionMode="Multiple" OnSelectedIndexChanged="lstArea_SelectedIndexChanged" AutoPostBack="true"></asp:ListBox>

我发现jquery代码验证相同,但更改功能不起作用。

    var limit = 3;
    $("#<%=lstArea.ClientID%>").change(function () {
        if ($(this).siblings(':checked').length >= limit) {
            this.checked = false;
        }
    });

2 个答案:

答案 0 :(得分:0)

我认为这个地址可以帮到你 https://stackoverflow.com/a/27490795/5631805 也许你应该而不是

 if ($(this).siblings(':checked').length >= limit)

if($('#lstArea:checked').length >= limit)

答案 1 :(得分:0)

因为您已将属性AutoPostBack设置为true,并且您还设置了OnSelectedIndexChanged事件处理程序,.NET将为您的选择生成onchange属性每当选择一个项目时,都会触发POST回服务器。为了防止您需要将.NET代码更改为:

<asp:ListBox ID="lstArea" runat="server" SelectionMode="Multiple"/>

并将您的javascript代码更新为:

// Handle for the list
var list = $("#<%=lstArea.ClientID%>");

// Our limit
var limit = 3;

// Get currently selected values
var selected = list.val();

// Handle change event
list.change(function () {
    // If we reached the limit
    if (list.find(":checked").length >= limit) {
        // Set the list value back to the previous ones
        list.val(selected);
        return;
    }

    // Postback to the server
    setTimeout("__doPostBack('<%=lstArea.ClientID%>','')", 0);
});

每次呈现页面时,selected变量将保留最后选择的项目。在change处理程序中,您将获得所有选中/选中的选项,并且当新选择的选项的计数大于或等于您的限制时,您将通过设置所有先前的值取消选择最后选择的值。如果限制没问题,您将通过调用.NET函数__doPostBack进行回发。