如何检查Select2中是否打开了下拉列表?

时间:2014-04-08 18:53:13

标签: javascript jquery jquery-select2

我在我的网站上使用select2。如果下拉列表打开或关闭,我需要知道。我研究过documentation,但我不知道如何做到这一点。例如,这样的事情会很好:

if ($('select').select2('isOpen') === true) { ... }

有什么建议吗?

7 个答案:

答案 0 :(得分:14)

select2版本4.0中,您可以收听select2:opening元素上的select2:openselect2:closingselect2:closeselect个事件,例如:

$('select').on('select2:open', function (e) {
    // select2 is opened, handle event
});

答案 1 :(得分:9)

Select2 4.0有isOpen方法。如果#mySelect是您的HTML选择元素,那么:

$('#mySelect').data('select2').isOpen()

...将返回true或false,具体取决于Select2的状态。

答案 2 :(得分:6)

通过执行一些代码检查,看起来select2-dropdown-open是它添加的类。但是文档中的事件select2-open会在下拉列表打开时触发。您可以使用它来设置变量或执行操作(也是select2-close)。

您可以这样做:

$("#e11").on("select2-open", function() { 
    $(this).data("open", true);
});
$("#e11").on("select2-close", function() { 
    $(this).data("open", false);
});

if ($("#e11").data("open")) {
    //do something
}

2018年编辑

自2014年以来,事件的名称似乎已更新。See user1636505's answer below

答案 3 :(得分:3)

从Select2 4.0.6开始,这已更新为以下

$("#foo").select2("isOpen")

这将返回true / false

希望这有帮助!

答案 4 :(得分:1)

只要选择或删除选项,就会触发

change

每次打开下拉列表时都会触发

select2:open。 select2:在此之前触发开启,可以防止。

每当下拉列表关闭时,

select2:close都会被触发。 select2:在此之前触发关闭,可以防止。

只要选择了结果,就会触发

select2:select。 select2:在此之前触发选择并且可以防止。

只要取消选择结果,就会触发

select2:unselect。 select2:取消选择在此之前触发,可以防止。

答案 5 :(得分:0)

最好这样做:

var select2 = $('#selectorname').data('select2');
if (select2.opened()) {
        //do it
    } else {
        //dont do it
    }

答案 6 :(得分:0)

$( '选择')SELECT2( 'isFocused');

https://github.com/select2/select2/issues/39