【问题标题】:Destroy Bootstrap Popover with selector option使用选择器选项销毁 Bootstrap 弹出框
【发布时间】:2014-11-24 16:02:24
【问题描述】:

如何销毁使用选择器选项创建的 Bootstrap 弹出框?例如

$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(),但我再次不确定这是预期的设计,并且在我能找到的任何地方都没有记录。

这是sample jsFiddle

【问题讨论】:

  • 您使用的是什么版本的 Bootstrap?即使使用您的代码,我仍然会得到 data 应该是什么(在您的示例中 data.mark 是什么)。
  • @Matt 这是 Bootstrap 3.3.1
  • 啊,我正在研究旧版本。似乎是 Bootstrap 中的一个明显错误(在此提交中引入;github.com/twbs/bootstrap/commit/…
  • 感谢@Matt - 很好的发现。 :) 随时向 twbs 提交错误报告并参考此(或让我知道,我可以提交)。干杯
  • Brian:我评论过github.com/twbs/bootstrap/issues/15168... 看来这不是一个经过深思熟虑的改变,而且破坏了很多东西!

标签: javascript twitter-bootstrap bootstrap-popover


【解决方案1】:

正如Matt 评论的那样,这是a Bootstrap bug in 3.3.1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多