2013-08-13 55 views
5

Tôi đã hai chọn tùy chọn, lớp và class_attr lớp có 2 lựa chọn: A và B class_attr có nhiều lựa chọn: aa, bb, cc, dd, ee, ...thay đổi jquery chọn tùy chọn max_selected động

Câu hỏi của tôi là, cách triển khai nếu người dùng chọn A, max_selected được chọn chỉ có 5 tùy chọn và nếu người dùng thay đổi thành B, max_selected đã chọn chỉ có 3 tùy chọn.

Tôi đang cố gắng để làm một cái gì đó như thế này:

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

Nhưng điều này dường như không thể làm việc, danh sách lựa chọn cho class_attr sẽ được thiết lập một lần duy nhất (người đầu tiên giá trị max_selected_options lớp chọn, cho dù 5 hay 3) và sẽ không bao giờ cập nhật max_selected_options sau lần đầu tiên. Cảm ơn bạn ~

Trả lời

5

Hãy thử điều này:

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

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

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

Dường như bạn không thể thay đổi bất kỳ tùy chọn sau khi nó được initalised vì vậy nó phải bị tiêu diệt trước khi được tạo ra lần nữa.

+0

Sorry2 tôi chỉ có loại sai, tôi có nghĩa là tôi kích hoạt ("Liszt: cập nhật"); trên $ (". class_attr") thay vì $ ("# item_opt") nhưng nó vẫn không hoạt động – paugoo

+0

Cảm ơn bạn rất nhiều vì đã trả lời. Tôi đã cố gắng triển khai phương pháp của bạn nhưng vẫn không thể hoạt động và thậm chí cả max_selected_options cũng không thể hoạt động. – paugoo

+0

Đây là một [fiddle] (http://jsfiddle.net/55FDq/) cho thấy nó hoạt động. Tôi nghĩ rằng bạn cần phải sử dụng lựa chọn 1.0 để có được chức năng tiêu diệt. –

1

Trong một dự án của tôi tôi đã cần thiết lập giá trị maximun không cho tất cả các lựa chọn thả xuống, vì vậy tôi sử dụng khởi tạo tiếp theo đối với họ:

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 
    }); 
}); 

Mở trình đơn thả xuống mà tối đa chọn tùy chọn nên được giới hạn tôi thuộc tính tập hợp dữ liệu-max-tùy chọn

Ví dụ:

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