禁用select2 clear下拉开启

时间:2015-04-14 02:52:50

标签: jquery jquery-select2 clear

似乎select2 4默认打开清除当前所选项目时的下拉列表。以前版本的select2似乎没有这种行为,我试图实现它,但现在没有运气。

有没有人知道如何挂钩清除事件,以便我们可以禁用它的默认行为并清除所选选项而不打开下拉列表?

干杯, 人

5 个答案:

答案 0 :(得分:30)

你不需要超时来完成这项工作,这是我的例子:

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

答案 1 :(得分:10)

可以确认,防止事件似乎由于某种原因不起作用,所以你可以在一些超时后关闭下拉列表:

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

这是一个工作小提琴:http://jsfiddle.net/obq3yLf2/

答案 2 :(得分:1)

请在Github上查询。

Prevent select2:open when clearing selection

从那里我列出了提供的答案。

1选项

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

2选项

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

答案 3 :(得分:0)

另一个简单的实现:

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

答案 4 :(得分:0)

在取消选择其中一个项目之后,我遇到了一个短暂的延迟问题,此解决方案为我解决了这个问题:

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