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