2015-04-14 15 views
6

Dường như select2 4 mở theo mặc định menu thả xuống khi xóa mục đã chọn hiện tại. Các phiên bản trước của select2 dường như không có hành vi đó và tôi đang cố gắng để đạt được nó nhưng không có may mắn cho bây giờ.Tắt mở thả xuống trên select2 rõ ràng

Có ai biết cách móc vào sự kiện rõ ràng để chúng tôi có thể tắt hành vi mặc định của nó và xóa tùy chọn đã chọn mà không cần mở menu thả xuống không?

Chúc mừng, Al

+0

Giả sử rằng đây là một lựa chọn duy nhất, bạn có thể 'preventDefault' mục 'Select2: sự kiện closing' được kích hoạt ngay sau 'select2: bỏ chọn'. Vào lúc khác, tôi có thể viết ra một câu trả lời hoàn chỉnh hơn. –

+0

Cảm ơn Kevin, tôi đã có một thử nhưng tôi nhận được lỗi "Không thể thiết lập tài sản 'ngăn chặn' của undefined" khi preventDefault trên select2: đóng cửa. Tôi đã đặt cùng một fiddle nhanh chóng tại http://jsfiddle.net/r56zh872/ bất kỳ trợ giúp sẽ được đánh giá cao. – Alberto

+0

@KevinBrown Có vấn đề ngược dòng nào được tạo ra cho tình huống này không? –

Trả lời

9

Có thể khẳng định, ngăn chặn các sự kiện dường như không làm việc cho một số lý do, vì vậy bạn chỉ có thể đóng cửa thả xuống sau một thời gian chờ:

$("select").select2({ 
    allowClear: true 
}).on("select2:unselecting", function(e) { 
    $(this).data('state', 'unselected'); 
}).on("select2:open", function(e) { 
    if ($(this).data('state') === 'unselected') { 
     $(this).removeData('state'); 

     var self = $(this); 
     setTimeout(function() { 
      self.select2('close'); 
     }, 1); 
    }  
}); 

Dưới đây là một fiddle làm việc: http://jsfiddle.net/obq3yLf2/

+0

Chúc mừng Sam. Giải pháp tốt cho đến khi vấn đề ngăn ngừa được giải quyết. – Alberto

+0

Giải pháp thứ hai tốt hơn, không có timeOut – naxo8628

19

Bạn không cần thời gian chờ để thực hiện tác phẩm này, đây là ví dụ của tôi:

$('#my-select').select2({ 
    allowClear: true 
}).on('select2:unselecting', function() { 
    $(this).data('unselecting', true); 
}).on('select2:opening', function(e) { 
    if ($(this).data('unselecting')) { 
     $(this).removeData('unselecting'); 
     e.preventDefault(); 
    } 
}); 
+2

Ví dụ: http://jsfiddle.net/obq3yLf2/14/ –

+1

Vì vậy, tốt hơn nhiều, cảm ơn – DoubleYo

+0

Điều gì xảy ra nếu tôi có nhiều select2 trong một trang? –

0

Một thực hiện đơn giản:

   $('select').on('select2:unselect', function(evt) { 
      $(this).select2({ 
       placeholder : { 
        id : '', 
        text : '---None Selected---' 
       }, 
       allowClear : true, 
       theme : "bootstrap" 
      }).select2('close'); 

     }); 
0

Tôi đã có một vấn đề với một sự chậm trễ ngắn sau khi bỏ chọn một trong các mục và giải pháp này cố định vấn đề mà đối với tôi:

$(this).select2({ 
    multiple: 'multiple', 
}).on("select2:unselecting", function(e) { 
    var self = $(this); 
    setTimeout(function() { 
     self.select2('close'); 
    }, 0); 
}); 
1

Vui lòng tham khảo tại Github cho cùng .

Prevent select2:open when clearing selection

Từ đó tôi đã liệt kê các câu trả lời được cung cấp.

1 Phương án

$('#select-id').on('select2:unselecting', function() { 
    var opts = $(this).data('select2').options; 
    opts.set('disabled', true); 
    setTimeout(function() { 
     opts.set('disabled', false); 
    }, 1); 
}); 

2 Lựa chọn

var $el = $('#select-id'); 
$el.on('select2:unselecting', function(e) { 
    $el.data('unselecting', true); 
}).on('select2:open', function(e) { // note the open event is important 
    if ($el.data('unselecting')) {  
     $el.removeData('unselecting'); // you need to unset this before close 
     $el.select2('close'); 
    } 
}); 
Các vấn đề liên quan