配置引导程序弹出窗口只出现一次?

时间:2014-01-17 09:45:55

标签: javascript twitter-bootstrap jquery

我正在使用Bootstrap .popover()在输入字段与预期格式不匹配时显示通知。我认为在hidden.bs.popover事件中杀死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');

3 个答案:

答案 0 :(得分:4)

根据documentation,destroy调用hide:

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

您可以尝试在其中调用destroy之前取消注册其事件处理程序中的hidden.bs.popover,并在show事件中重新附加它。这不一定是干净的编码,但它会完成工作,并且在我看来是可以接受的。

像(伪代码):

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 :(得分:1)

我只需要实现类似的东西,并发现这是一个更清洁的解决方案。当然,您可以替换不同的事件类型来关闭弹出窗口。

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

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

答案 2 :(得分:0)

对我有用的简单方法:

elem.popover({
  //options
})
.popover('show')
.popover('disable')