我需要创建一个复选框列表,它应该选择最多4个项目。 如果用户选择第5项,则应仅清除特定的第5项。 目前此代码始终清除checkboxlist的第一项。
这是我的c#:
<asp:ListBox ID="lstSalesPerson" runat="server" SelectionMode="Multiple" AutoPostBack="true" OnSelectedIndexChanged="lstSalesPerson_SelectedIndexChanged"> </asp:ListBox>
这是我的HTML:
$('#9lessonsLinks').html(div_data);
答案 0 :(得分:0)
你应该按如下方式反转循环。在你的循环中,它从索引[0]开始并检查所选项目总数是否> 4如果正确则会使第一项错误。
所以循环应该来自反向索引。因此,如果选择了5个项目,那么选择的第一个索引将为[4]并且它将变为错误
尝试以下代码
for (int i = lstSalesPerson.Items.Count-1; i >=0 ; i--)
{
if (lstSalesPerson.Items[i].Selected == true)
{
if (items.Count() > 4)
{
Label1.Text = "checked maximum 4 items.";
lstSalesPerson.Items[i].Selected = false;
}
}
}
答案 1 :(得分:0)
我发现使用javascript的答案如下: 这可能有助于某人:我正在使用此控件.multiselect-container&gt; li> a&gt;标签&gt;输入,因为我的控件是在模板设计中使用这种方式呈现的。但你可以使用代码的逻辑..谢谢
$('.multiselect-container > li > a > label > input').click(function (e) {
var ddl = document.getElementById("<%=lstSalesPerson.ClientID%>");
if ($(this).prop('checked')) {
var count = 0;
for (var i = 0; i < ddl.options.length; i++) {
if (ddl.options[i].selected) {
count++;
if (count > 3) {
$(this).removeAttr('checked');
$(this).parent().parent().parent().prop('checked', false);
$(this).parent().parent().parent().prop('clicked', false);
$(this).parent().parent().parent().removeClass('active');
alert("You can select Max 4 sales person.");
return false;
}
}
}
}
});