为什么 select2 事件不能正确触发?

why won't select2 events fire correctly?

给定以下 coffeescript

class ModalController
  constructor: (modalClass) ->
    @modalClass = modalClass
    @enableSelect2()
    @clearSelectOptions()

  enableSelect2: () ->
    $('.select2-init').select2()
      .on 'select2-open', (e) ->
        console.log e
      .on 'select2:selecting', (e) =>
        console.log 'added'
        @validatePresenceOf($(e.target))

我希望当我做出选择时,上面的代码特别是调用 .on 'select2:selecting 的行应该触发,这绝对不是下面代码段中记录的情况。

我的理解基于 select2 文档

如何解决这个问题?

事件选择中可能有错别字,

下面的 coffeescript

  enableSelect2: () ->
    $('.select2-init').select2()
      .on 'change', (event) =>
        if event.added
          @validatePresenceOf($(event.target))
      .on 'select2:selecting', (e) =>
        console.log "selecting"
      .on 'select2:select', (e) =>
        console.log "select"
      .on 'select2-removed', (e) =>
        @validatePresenceOf($(e.target))

生成以下内容,注意没有日志语句(尽管我已经通过使用 event.added 检查破解了我正在寻找的验证。

模式select2:eventname 没有做任何事情,即没有日志记录,没有挂钩。这很奇怪。我在互联网上的一个随机站点上找到了 select2-eventname 模式。这对我来说非常奇怪和令人不安,这似乎是一段简单的代码。

可能有错字。应该是

.在 'select2-selecting' ...

而不是

.在 'select2:selecting' ...

似乎正在使用 Select2 3.x,但您引用的内容来自 Select2 4.0.0 文档。

Select2 4.0.0 文档:https://select2.github.io/
Select2 3.5.2 文档:http://select2.github.io/select2/

主页上还有一个 link linkSelect2 3.5.2 文档。


您正在使用 select2-open,它似乎在工作并且是一个 3.5.2 事件,但您也在尝试使用 select2:selecting,这是一个 4.0.0 事件。 select2:selecting 的 Select2 3.5.2 事件是 select2-selecting(注意 - 而不是 :)。

查看活动文档时的其他显着变化

  • change 用于包含 addedremoved 属性,用于检查添加和删除内容的时间。现在您应该使用 select2:select 事件来检查何时添加内容,并使用 select2:unselect 来检查何时删除内容。
  • select2-selecting 现在是 select2:selecting
  • select2-removing 现在是 select2:unselecting
  • select2-removed 现在是 select2:unselect
  • select2-opening 现在是 select2:opening
  • select2-open 现在是 select2:open