2014-11-24 65 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

回答