Захват любого клика, выполняемого с помощью 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.