новичок способ сделать это, который я предполагаю, было бы
$('*').click(function(){...});
Но есть ли какой-либо способ, которым я могу поймать какой-либо тип щелчка, не имея необходимость регистрировать слушателя для каждого объекта в DOM?
Справка была бы удивительна.=)
Как насчет того, чтобы просто прикрепить клик к телу?
$('body').click(function(e){ ... })
В e.target
должно содержаться то, на что кликнули
$ ('*'). Click (function () {...})
будет перехватывать клики только по элементам, которые существовали, когда вы вызывали .click ()
. Чтобы улавливать щелчки по элементам, которые могут быть созданы позже, вам нужно будет выполнить привязку к body
или документу
, как предлагали другие.
Как насчет:
$('body').click(function(){...});
Любой щелчок будет на теле, поскольку это родитель всех видимых узлов в домене.
Вы можете использовать делегирование событий в документе, чтобы улавливать все щелчки.
jQuery заполнит свойство target
события
, чтобы получить выбранный элемент.
$(document).click(function(event){
// event.target is the clicked object
});
Обратите внимание, что event.target
будет самым глубоким щелчком по элементу. Пример: если в
есть
, вы получите
, а не
.
Если вы хотите поймать любой щелчок, но хотите получить определенный элемент (например, класс), вы можете сделать следующее:
$(document).click(function(event){
$(event.target).closest(".clickable").each(function(){
// "this" is your "clickable" clicked
});
});
Если только обработчик событий на элементе по пути не выполняет event.stopPropagation ()
или вернут false
, вы получите щелчок здесь.
Событие click
по умолчанию всплывает в DOM , поэтому вы можете просто прикрепить обработчик click
к корню , например:
$(document).click(function() {
//do something
});
Если обработчик элемента по пути не event.stopPropagation ()
или возвращает false
, вы получите щелчок здесь.