1

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

$('[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 时会重新出现。

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

4

3 回答 3

1

你会发布相关的 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');
   }
});

看起来你忘了添加/删除那个类,也许这会更好?再一次,我有点感觉在黑暗中没有看到你的内容。

于 2013-07-08T18:13:37.427 回答
0
if( _dropdown.hasClass('select2-dropdown-open') ) {
$(this).find('select.interface_dropdown').select2('close');
}

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

于 2013-07-08T18:43:48.763 回答
0

正确的方法是:

$('select').data('select2').toggleDropdown()
于 2016-09-04T03:57:13.413 回答