2014-11-29 11 views
5

Tôi có một loạt các trình chọn Bootstrap Selectpickers để lọc kết quả từ cơ sở dữ liệu. Tôi cần một cách để đặt lại tất cả các selectpickers để 'Nothing Selected', đây là mã của tôi:Bootstrap Selectpicker sẽ không được đặt lại bằng các chức năng tích hợp

HTML

<div class="row"> 
    <div class="col-md-3"> 
     <label>By Group</label> 
     <select id="groups" name="group" class="form-control selectpicker" multiple></select> 
    </div> 
    <div class="col-md-3"> 
     etc... 
    </div> 
</div> 

JS

ajax_fetch('build_group_options', {groupno:groupno}).done(function(html) { 
    //var html is a list of options in html format 
    $('#groups').html(html).find('option[value=""]').remove(); 
    //refresh the selectpicker to make sure options are registered in the picker 
    $('.selectpicker').selectpicker('refresh'); 
}); 

Cố gắng thiết lập lại tất cả các hái:

$('#reset_filters').click(function() { 
    $('.selectpicker').selectpicker('deselectAll'); 
    $('.selectpicker').selectpicker('render'); 
    $('.selectpicker').selectpicker('refresh'); 
    $(this).closest('form').find('.selectpicker').each(function() { 
     $(this).selectpicker('render'); 
    }); 
}); 

Như bạn có thể thấy tôi đã thử tất cả các chức năng để quay lại thiết lập nhưng vô ích, vì vậy rõ ràng là làm một số sai xa hơn lên logic.

+1

thử đoạn mã 'reset' ngay hôm nay và bỏ chọn các hộp chọn của tôi. Vì vậy, điều này có thể đã được khắc phục kể từ khi bạn gặp sự cố này. Chỉ cần một bình luận cho người khác sau. – jonas

+0

Bạn là MVP thực sự. Nếu bạn kiểm tra github của silviomoreto (https://github.com/silviomoreto/bootstrap-select), bạn sẽ thấy anh ta đã thay đổi mã rất nhiều trong vài năm qua. v1.6.3 -> v1.12.2 – Edward

Trả lời

1

Vì vậy, tôi nhìn vào tập tin selectpicker.js, các deselectAllselectAll chức năng cả lọc tùy chọn tương ứng của họ bằng một vài đối số (xem dòng 884):

deselectAll: function() { 
    this.findLis(); 
    this.$lis.not('.divider').not('.disabled').filter('.selected').filter(':visible').find('a').click(); 
} 

Một sự cố nhỏ:

.not('.divider') //prevents the divider receiving a click event! 
.not('.disabled') //ignore any disabled elements 
.filter('.selected')/.not('.selected') //depending if its selectAll() or deselectAll() 
.filter(':visible') //prevent any non-visible element receiving a click event!? 

Vấn đề của tôi là .filter(':visible'), danh sách không hiển thị khi sự kiện nhấp được kích hoạt để các tùy chọn này được lọc ra và do đó không nhận được 'clic ked '/' bỏ chọn '. Tôi đã sửa đổi phiên bản plugin của mình và giờ nút 'đặt lại' của tôi hoạt động như mong đợi. Các dòng sản phẩm mới là:

this.$lis.not('.divider').not('.disabled').filter('.selected').find('a').click();

12

tôi có giải pháp từ sau code.Try nó

$("#listID").val('').trigger('change'); 

Và bạn cũng có thể thử này

$("#listID").val('').selectpicker('refresh'); 
Các vấn đề liên quan