试图停止 Select2 multi-select 选项删除的事件传播

Trying to stop event propagation of Select2 multi-select option remove

我的 UI 有一些从 Bootstrap 创建的下拉菜单,我用它来包含一些表单元素。我用我在这里找到的解决方案阻止下拉菜单关闭,这几乎是完美的: Avoid dropdown menu close on click inside

剩下的问题是我使用 Select2 多个 select 和 删除 选项的特定实例。删除操作似乎遵循不同的事件链,因为它关闭了下拉列表。我的假设是该事件正在传播到父元素,但我似乎无法确定是哪一个。

这里有一个JSFiddle来说明这个问题。 Select 一个选项,然后删除它看看会发生什么。下面是包含 jsfiddle 时所需的代码。当然,它从我的实际代码中删减了,但至少代表了问题。

$('body').on('click', '.dropdown .cycle-element', function(e) {
  $(this).parent().toggleClass('open');
});

$('body').on('click', function(e) {
  if (!$('.dropdown').is(e.target) && $('.dropdown').has(e.target).length === 0 && $('.open').has(e.target).length === 0) {
    $('.dropdown').removeClass('open');
  }
});

$('.dependency-select').select2();

@TheGremlyn 这是你能做的。我还没有完全测试它,但乍一看,当 div 关闭时关闭 select2 似乎是解决方案。

您可以如下关闭select2。

$('.dependency-select').select2('close');

这是更新后的代码。看看这个。 https://jsfiddle.net/c1ef7138

我们运行陷入了基本相同的问题。根本问题是,当使用 select2 多选时,当您删除选项时触发的取消选择事件会传播并最终关闭 bootstrap 下拉列表。

处理此问题的简单方法是侦听事件并停止传播

$('your-select').on("select2:unselect", function(e) {
  if (!e.params.originalEvent) {
    return
  }

  e.params.originalEvent.stopPropagation();
});