使用选择器选项销毁Bootstrap Popover

时间:2014-11-24 16:02:24

标签: javascript twitter-bootstrap bootstrap-popover

如何销毁使用选择器选项创建的Bootstrap popover? e.g。

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

如果您再致电$e.popover('destroy'),则会收到错误。

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

 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(),但我不确定是否是预期的设计,而且我找不到任何记录。

这里是sample jsFiddle

1 个答案:

答案 0 :(得分:2)

Matt所述,这是a Bootstrap bug in 3.3.1