2014-11-24 89 views
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

+0

您使用的是什么版本的Bootstrap?即使在使用你的代码时,我仍然会得到'数据'(应该是你的例子中的'data.mark')。 – Matt 2014-11-24 16:32:00

+0

@Matt It's Bootstrap 3.3.1 – 2014-11-24 16:38:07

+0

啊,我正在做一个旧版本。看起来像Bootstrap中的明显错误(在此提交中介绍; https://github.com/twbs/bootstrap/commit/1b3237629a316af41945e20837cf3a332798b264) – Matt 2014-11-24 16:42:29

回答

相关问题