Подтвердить что ты не робот

Захват любого клика, выполняемого с помощью jQuery

noob способ сделать это, я думаю, будет

$('*').click(function(){...});

Но есть ли способ поймать любой тип щелчка, не регистрируя слушателя для каждого объекта в DOM?


Помощь будет потрясающей. =)

4b9b3361

Ответ 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.