2
如何销毁使用选择器选项创建的Bootstrap弹出窗口?例如使用选择器选项销毁Bootstrap弹出窗口
$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
您使用的是什么版本的Bootstrap?即使在使用你的代码时,我仍然会得到'数据'(应该是你的例子中的'data.mark')。 – Matt 2014-11-24 16:32:00
@Matt It's Bootstrap 3.3.1 – 2014-11-24 16:38:07
啊,我正在做一个旧版本。看起来像Bootstrap中的明显错误(在此提交中介绍; https://github.com/twbs/bootstrap/commit/1b3237629a316af41945e20837cf3a332798b264) – Matt 2014-11-24 16:42:29