Javascript 从不同元素切换select2

Javascript 从不同元素切换select2,javascript,jquery,jquery-select2,Javascript,Jquery,Jquery Select2,我们在一行中有一个select2下拉列表(只有一个div),我们需要能够单击整行来触发下拉列表。我在展示它时没有问题,但试图隐藏它却成了一个问题,我想知道我的逻辑是否有缺陷。Select2AFAIK在我们使用的版本上没有切换方法,所以我必须手动使用它的打开和关闭方法。这就是我试过的 $('[data-variable-type=select]').on('click', function(e){ e.stopPropagation(); var _dropdown = $(this).f

我们在一行中有一个select2下拉列表(只有一个div),我们需要能够单击整行来触发下拉列表。我在展示它时没有问题,但试图隐藏它却成了一个问题,我想知道我的逻辑是否有缺陷。Select2AFAIK在我们使用的版本上没有切换方法,所以我必须手动使用它的打开和关闭方法。这就是我试过的

$('[data-variable-type=select]').on('click', function(e){
  e.stopPropagation();
  var _dropdown = $(this).find('div.interface_dropdown');
  if( _dropdown.hasClass('select2-dropdown-open') ) {
    $(this).find('select.interface_dropdown').select2('close');
  }
  else {
    $(this).find('select.interface_dropdown').select2('open');
  }
});
这会使它正常打开,但当您单击以关闭它时,它会在mousedown时关闭,但在mouseup时重新出现


有什么方法可以让它正确切换吗?

你能发布相关的HTML吗?如果看不到内容,很难理解你在做什么

$('[data-variable-type=select]').on('click', function(e){ 
    e.stopPropagation();
    var _dropdown = $(this).find('div.interface_dropdown');
    if( _dropdown.hasClass('select2-dropdown-open') ) {
        _dropdown.removeClass('select2-dropdown-open');
        _dropdown.select2('close');
    } else {
       _dropdown.select2('open');
       _dropdown.addClass('select2-dropdown-open');
   }
});

看起来你忘了添加/删除那个类,也许这样会更好?再一次,我在黑暗中摸索,看不到你的内容

你会发布相关的HTML吗?如果看不到内容,很难理解你在做什么

$('[data-variable-type=select]').on('click', function(e){ 
    e.stopPropagation();
    var _dropdown = $(this).find('div.interface_dropdown');
    if( _dropdown.hasClass('select2-dropdown-open') ) {
        _dropdown.removeClass('select2-dropdown-open');
        _dropdown.select2('close');
    } else {
       _dropdown.select2('open');
       _dropdown.addClass('select2-dropdown-open');
   }
});
if( _dropdown.hasClass('select2-dropdown-open') ) {
$(this).find('select.interface_dropdown').select2('close');
}
看起来你忘了添加/删除那个类,也许这样会更好?再一次,我在黑暗中摸索,看不到你的内容

if( _dropdown.hasClass('select2-dropdown-open') ) {
$(this).find('select.interface_dropdown').select2('close');
}
在更高版本的select2(3.3+iirc)中,这将永远不会触发,因为当打开select2时,它会在整个浏览器上创建一个透明的掩码,并侦听单击事件。单击当前打开的掩码时,选择2关闭。这是在用户准备执行其他操作时关闭select2的唯一可靠方法

在更高版本的select2(3.3+iirc)中,这将永远不会触发,因为当打开select2时,它会在整个浏览器上创建一个透明的掩码,并侦听单击事件。单击当前打开的掩码时,选择2关闭。当用户准备做其他事情时,这是关闭select2的唯一可靠方法。

正确的方法是:

$('select').data('select2').toggleDropdown()
正确的方法是:

$('select').data('select2').toggleDropdown()

我相信select2的“打开”和“关闭”方法会自动处理。我相信select2的“打开”和“关闭”方法会自动处理。谢谢,我们现在正在升级我们的版本,如果有任何进展,我会告诉你:)谢谢,我们现在正在升级我们的版本,如果有任何进展,我会告诉你:)