2013-08-13 32 views
5

mam dwa wybrać opcję, klasa i class_attr klasa ma 2 opcje: A i B class_attr posiada wiele opcji: AA, BB, CC, DD, EE, ...zmiana jquery wybrany max_selected opcję dynamicznie

Moje pytanie brzmi, jak zaimplementować, jeśli użytkownik wybierze A, wybrany max_selected to tylko 5 opcji, a jeśli użytkownik zmieni się na B, wybrany max_selected to tylko 3 opcje.

Próbuję zrobić coś takiego:

$(".class").change(function(){ 
     var code = $(this).val(); 
     if(code == 1){ 
      $(".class_attr").chosen({max_selected_options: 5}); 
      } 
     else{ 
       $(".class_attr").chosen({max_selected_options: 3});   
     } 
     $(".class_attr").trigger("liszt:updated"); 
}); 

Ale to wydaje się nie może pracować, lista opcji dla class_attr zostaną ustawione tylko raz (pierwsza wartość max_selected_options klasa wybrana, czy 5 lub 3) i nigdy nie zaktualizuje max_selected_options po raz pierwszy. Dziękuję ~

Odpowiedz

5

Spróbuj tego:

$('.class').chosen().change(function() { 

    var code = $(this).val(); 
    var maxOptions = code == 1 ? 5 : 3; 

    $(".class_attr").chosen('destroy').chosen({ max_selected_options: maxOptions }); 
}); 

Wygląda na to, że nie można zmienić żadnych opcji po to zostało initalised więc to musi być zniszczone przed tworzony raz.

+0

Sorry2 właśnie złego typu, to znaczy ja wywołać ("Liszt: zaktualizowano"); na $ (". class_attr") zamiast $ ("# item_opt"), ale nadal nie działa – paugoo

+0

Dziękuję bardzo za odpowiedź. Próbowałem zaimplementować twoją metodę, ale nadal nie działa, a nawet opcja max_selected_options nie może w ogóle działać. – paugoo

+0

Oto [skrzypce] (http://jsfiddle.net/55FDq/) pokazujące, że działa. Myślę, że musisz użyć wybranego 1.0, aby uzyskać funkcję niszczenia. –

1

W jednym moim projekcie została trzeba ustawić wartość Maximun nie do wszystkich wybranych list rozwijanych, więc użyłem następny inicjalizacji dla nich:

jQuery.each(jQuery(".chosen-select"), function (index, select) { 
    var max_options = 0;//zero mean unlimited 

    if (jQuery(select).data('max-options') !== 'undefined') { 
     max_options = jQuery(select).data('max-options'); 
    } 

    jQuery(select).chosen({ 
     search_contains: true, 
     no_results_text: lang.no_results, 
     placeholder_text_single: lang.select_one, 
     placeholder_text_multiple: lang.select_some, 
     disable_search: disable_search, 
     max_selected_options: max_options 
    }); 
}); 

Z listy rozwijanej których maksymalne wybrane opcje powinny być ograniczone I zestaw atrybut data-mAX-options

Przykład:

<select class="chosen-select" data-max-options="5" name="lands[]" multiple="" data-placeholder=''> 
         //options in cycle here 
</select>