2016-05-26 9 views
0

Мне нужно создать checkboxlist, который должен выбрать максимум 4 элемента. , если пользователь выбирает 5-й элемент, тогда он должен очищать только один пятый элемент. В настоящее время этот код всегда очищает первый элемент checkboxlist.как ограничить выбор checkboxlist до 4 и на 5-й выбор он должен очистить только 5-й выбранный элемент

это мой C#:

protected void lstSalesPerson_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     var items = from ListItem li in lstSalesPerson.Items 
        where li.Selected == true 
        select li; 

     Label1.Text = ""; 



     for (int i = 0; i < lstSalesPerson.Items.Count; i++) 
     { 

      if (lstSalesPerson.Items[i].Selected == true) 
      { 
       if (items.Count() > 4) 
       { 
        Label1.Text = "checked maximum 4 items.";      
        lstSalesPerson.Items[i].Selected = false; 
       } 
      } 
     }   
    } 

это мой HTML:

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

ответ

0

я нашел ответ, используя JavaScript это выглядит следующим образом: Это может помочь кому-то: Я использую этот элемент управления .multiselect-container> li> a> label, потому что мой элемент управления был визуализирован таким образом в дизайне шаблонов. но вы можете использовать логику для своего кода. Спасибо

$('.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; 
          } 
         } 
       } 


      } 
     }); 
+0

этот код работает правильно в хроме и другом браузере, кроме IE .... Кто-то может мне помочь или исправить этот код. .. это было бы полезно ... – Ajinkya

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; 
       } 
      } 
     } 
+0

спасибо, но теперь он очищает последний элемент ... он должен очищать только последний выбранный. что я делаю? – Ajinkya

+0

@AjinkyaWavare не получил вас – Sachu

+0

ранее он очищал 1-й элемент всегда, когда 5-й элемент выбирается ... теперь он очищает последний элемент элемента списка .... он должен очистить любой средний, т. Е. 5-й выбранный элемент. – Ajinkya