2014-01-17 25 views
1

我使用Bootstrap .popover()來顯示通知,只要輸入字段與預期格式不匹配。我認爲這將是直截了當地殺死hidden.bs.popover事件酥料餅的,但是這樣做的土地我與錯誤讀數遞歸循環:將引導彈窗只配置一次?

error (firebug): 
    too much recursion 

line 4985 in wordpress/wp-includes/js/jquery/jquery.js?ver=1.10.2 
    for (; cur; cur = cur.parentNode) { 

我試圖從事件處理程序返回false以及調用.preventDefault() 。我可以看到爲什麼這是一個錯誤的方法,並會要求提供關於如何在已經顯示並關閉一次後徹底銷燬.popover的建議。

invalid_regex_input.popover({ 
    placement: 'top', 
    title: 'Invalid input', 
    content: 'Please type in a valid value' 
}) 
.on('hidden.bs.popover', function (e) { 
    //console.log('destroy', e); 
    //e.preventDefault(); 

    $(this).popover('destroy'); 

    //return false; 
}) 
.popover('show'); 
+0

Boobstrap?哦,弗洛伊德... :) – UweB

+0

我發現了一個笑,當我發現錯字,所以我認爲別人也可能:) –

+0

你能給出確切的錯誤發生與哪個js文件,這樣很容易找出問題 –

回答

4

按照documentation,破壞來電隱藏:

.popover('destroy') 
Hides and destroys an element's popover. 

你可以嘗試註銷其事件處理程序中的hidden.bs.popover,呼籲消滅那裏之前,並且在顯示事件重新接通。這不一定是乾淨的編碼,但它會完成工作,在我看來是可以接受的。

類似的信息(僞代碼):

function onPopoverHidden(ev) { 
    // Unregister self, by calling .off('hidden.bs.popover') on the popover object 
    // Then, call .popover('destroy') on it. 
} 

.on('show.bs.popover', function() { 
    // (re-)attach onPopoverHidden event handler function 
}) 
.on('hidden.bs.popover', onPopoverHidden); 

invalid_regex_input.popover({/* settings */}) 
.on('hidden.bs.popover', function (e) { 
    $(this).off('hidden.bs.popover'); 
    $(this).popover('destroy'); 
}) 
1

我不得不實行類似的東西,並發現這是一個更清潔的解決問題的辦法。當然,您可以使用不同的事件類型來關閉彈出窗口。

$('[data-toggle="popover"]').popover(); 

$('[data-toggle="popover"]').on('mouseleave', function() { 
    $(this).popover('destroy'); 
});