使用选择器选项销毁引导弹出框

Destroy Bootstrap Popover with selector option

本文关键字:选择器 选项      更新时间:2023-09-26

如何销毁使用选择器选项创建的引导弹出窗口?

例如
$e.popover({
  selector: 'mark',
  trigger: 'hover',
  container: "body",
});

如果随后调用$e.popover('destroy')则会出现错误。

我注意到popover('destroy')调用的Plugin函数如下:

 function Plugin(option) {
    return this.each(function () {
      var $this    = $(this)
      var data     = $this.data('bs.popover')
      var options  = typeof option == 'object' && option
      var selector = options && options.selector
      if (!data && option == 'destroy') return
      if (selector) {
        if (!data) $this.data('bs.popover', (data = {}))
        if (!data[selector]) data[selector] = new Popover(this, options)
      } else {
        if (!data) $this.data('bs.popover',(data = new Popover(this, options)))
      }
      if (typeof option == 'string') data[option]() /// <<-- THIS ALWAYS FAILS
    })
  }

如果你调用$e.popover('destroy')上面的行(清楚地标记)总是失败,因为它正在调用data['destroy'],但是数据将是一个像{mark: Popover}这样的对象。

它显然应该打电话给data['mark']['destroy']但我并不清楚这应该如何发生。

一种选择是创建一个字符串s = 'destroy'然后将 selector 属性添加到字符串中,但很明显这不是预期的设计。

或者,可以调用$e.data('bs.popover').mark.destroy(),但我再次不确定这是预期的设计,并且它没有记录在我能找到的任何地方。

这是一个示例 jsFiddle

正如 Matt 评论的那样,这是 3.3.1 中的引导错误。