Поймать любой клик, выполненный с помощью jQuery - PullRequest
24 голосов
/ 19 июля 2010

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

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

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


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

Ответы [ 5 ]

32 голосов
/ 19 июля 2010
Событие

A click по умолчанию приведет к появлению DOM , поэтому вы можете просто прикрепить обработчик click к корню, например:

$(document).click(function() {
  //do something
});

Если обработчик для элемента по пути не делает event.stopPropagation() или return false, вы получите щелчок здесь.

17 голосов
/ 19 июля 2010

Вы можете использовать делегирование событий в документе, чтобы поймать все клики.

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, вы получите щелчок здесь.

4 голосов
/ 19 июля 2010

$('*').click( function() {...} ) будет ловить только клики на элементах, которые существовали, когда вы звонили на .click().Чтобы ловить клики по элементам, которые могут быть созданы позже, вам нужно будет привязать к body или document, как предлагали другие.

4 голосов
/ 19 июля 2010

Как насчет простого прикрепления клика к телу?

$('body').click(function(e){ ... })

e.target должен содержать то, что было нажано на

3 голосов
/ 19 июля 2010

Как насчет:

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

Любой щелчок будет по телу, так как он является родительским для всех видимых узлов в DOM.

...