我正在使用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');
答案 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')