Обновление: немного более надежное решение: http://jsfiddle.net/mattdlockyer/C5GBU/72/
Для кнопок, содержащих только текст:
$('body').on('click', function (e) {
//did not click a popover toggle or popover
if ($(e.target).data('toggle') !== 'popover'
&& $(e.target).parents('.popover.in').length === 0) {
$('[data-toggle="popover"]').popover('hide');
}
});
Для кнопок, содержащих значки (этот код имеет ошибку в Bootstrap 3.3.6, см. исправление ниже в этом ответе)
$('body').on('click', function (e) {
//did not click a popover toggle, or icon in popover toggle, or popover
if ($(e.target).data('toggle') !== 'popover'
&& $(e.target).parents('[data-toggle="popover"]').length === 0
&& $(e.target).parents('.popover.in').length === 0) {
$('[data-toggle="popover"]').popover('hide');
}
});
Для JS Generated Popovers Используйте '[data-original-title]'
на месте из '[data-toggle="popover"]'
Предостережение: вышеприведенное решение позволяет сразу открывать несколько popovers.
По одному экземпляру за один раз:
Обновление: Bootstrap 3.0 .x, см. код или скрипт http://jsfiddle.net/mattdlockyer/C5GBU/2/
$('body').on('click', function (e) {
$('[data-toggle="popover"]').each(function () {
//the 'is' for buttons that trigger popups
//the 'has' for icons within a button that triggers a popup
if (!$(this).is(e.target) && $(this).has(e.target).length === 0 && $('.popover').has(e.target).length === 0) {
$(this).popover('hide');
}
});
});
Это обрабатывает закрытие всплывающих окон, которые уже открыты, а не нажаты или их ссылки не были нажаты.
Обновление: Bootstrap 3.3.6, см. скрипт
Исправлена проблема, когда после закрытия занимает 2 клика повторно открыть
$(document).on('click', function (e) {
$('[data-toggle="popover"],[data-original-title]').each(function () {
//the 'is' for buttons that trigger popups
//the 'has' for icons within a button that triggers a popup
if (!$(this).is(e.target) && $(this).has(e.target).length === 0 && $('.popover').has(e.target).length === 0) {
(($(this).popover('hide').data('bs.popover')||{}).inState||{}).click = false // fix for BS 3.3.6
}
});
});
Попробуйте этот путь из EventsController:
$this->Event->Category->find('all', array(
'conditions' => array('Category.id' => $catid)
));