Подписаться фаза захвата клика для обработки клика по элементам, которые вызывают preventDefault
.
Перезапустите его на элементе документа, используя другое имя click-anywhere
.
document.addEventListener('click', function (event) {
event = $.event.fix(event);
event.type = 'click-anywhere';
$document.trigger(event);
}, true);
Тогда, где вам нужно щелкнуть за пределами функциональности, подпишитесь на событие click-anywhere
на document
и проверьте, был ли щелчок за пределами интересующего вас элемента:
$(document).on('click-anywhere', function (event) {
if (!$(event.target).closest('#smth').length) {
// Do anything you need here
}
});
Некоторые заметки:
Вы должны использовать document
, так как это будет ошибкой производительности для запуска события на всех элементах, за пределами которых произошел щелчок.
Эта функция может быть включена в специальный плагин, который вызывает некоторый обратный вызов при внешнем щелчке.
Вы не можете подписаться на этап захвата, используя сам jQuery.
Вам не нужно загружать документ для подписки, поскольку подписка включена на document
, даже не на body
, поэтому она всегда существует независимо от размещения сценария и состояния загрузки.