Usando o Chrome, como descobrir a quais eventos estão vinculados a um elemento


148

Vamos supor que eu tenha um link na minha página:

<a href="#" id="foo">Click Here</a>

Não sei mais nada, mas quando clico no link, um alert("bar")é exibido. Então eu sei que em algum lugar, algum código está sendo vinculado #foo.

Como posso encontrar o código que está vinculando o alert("bar")evento click? Estou procurando uma solução com o Chrome.

Obs .: O exemplo é fictício, portanto, não estou procurando uma solução como: "Use XXXXXX e pesquise em todo o projeto" alert (\ "bar \") "). Quero uma solução real de depuração / rastreamento.

Respostas:


140

Usando o Chrome 15.0.865.0 dev . Há uma seção "Ouvintes de eventos" no painel Elementos:

insira a descrição da imagem aqui

E um "Pontos de interrupção de ouvintes de eventos" no painel Scripts. Use o mouse -> clique no ponto de interrupção e, em seguida, "avance para a próxima chamada de função", mantendo um olho na pilha de chamadas para ver qual função da terra do usuário lida com o evento. Idealmente, você substituiria a versão minificada do jQuery por uma versão não minificada, para que você não precise intervir o tempo todo e utilizá -la sempre que possível.

insira a descrição da imagem aqui


10
Aproximando-me, mas a maioria dos resultados está apontando para a linha 16 de ... jquery.min.js :( (Eu entendo o porquê, não há necessidade de explicar, mas como podemos encontrar quem chamou o método bind () de jQuery?
FMaz008

Essas ferramentas também estão disponíveis no Chrome 12.0.742.100. :) Obrigado !
FMaz008

13
@ Fofo: Você não precisa. Basta clicar no { }símbolo no canto inferior esquerdo ao visualizar js. Magia.
Hannes Schneidermayer

Percorrer o código de despacho de eventos complexos do jQuery é uma grande dor. A resposta do jQuery Audit abaixo ( stackoverflow.com/a/30487583/24267 ) é muito melhor.
mhenry1384

3
Para excluir o jquery da pilha de chamadas, coloque o script em caixa preta: developer.chrome.com/devtools/docs/blackboxing @ IonuțG.Stan, ou mods, você pode atualizar a resposta com uma referência ao blackbox - parece ser uma pergunta comum relevante para esta resposta.
Chris Hynes

47

Você também pode usar o inspetor do Chrome para encontrar eventos anexados de outra maneira, da seguinte maneira:

  1. Clique com o botão direito do mouse no elemento a ser inspecionado ou encontre-o no painel 'Elementos'.
  2. Em seguida, na guia / painel 'Event Listeners', expanda o evento (por exemplo, 'clique')
  3. Expanda os vários subnós para encontrar o que você deseja e, em seguida, procure onde está o subnó 'manipulador'.
  4. Clique com o botão direito do mouse na palavra 'função' e clique em 'Mostrar definição da função'

Isso levará você ao local onde o manipulador foi definido, conforme demonstrado na imagem a seguir, e explicado por Paul Irish aqui: https://groups.google.com/forum/#!topic/google-chrome-developer-tools/NTcIS15uigA

'Mostrar definição da função'


dois anos e ainda a melhor resposta para essa pergunta.
Stuart

16

Experimente a extensão do jQuery Audit ( https://chrome.google.com/webstore/detail/jquery-audit/dhhnpbajdcgdmbbcoakfhmfgmemlncjg ), depois de instalar, siga estas etapas:

  1. Inspecione o elemento
  2. Na nova guia ' jQuery Audit ' expanda a propriedade Events
  3. Escolha o evento que você precisa
  4. Na propriedade manipulador, clique com o botão direito do mouse na função e selecione ' Mostrar definição da função '
  5. Agora você verá o código de associação de eventos
  6. Clique no botão ' Impressão bonita ' para uma visualização mais legível do código

1
Essa é uma excelente extensão e economiza muito tempo analisando o JavaScript.
Neil Monroe

Costumo constatar que "Ouvintes de eventos" lista "Nenhum ouvinte de eventos" e que selecionar "Pontos de interrupção do ouvinte de eventos"> Mouse> Clique não cria um ponto de interrupção. Este plugin funciona muito bem.
StuartN

@Javier> é uma ótima resposta. Funciona para um mecanismo javascript (não jQuery)?
Mahefa

11

(Mais recente a partir de 2020) Para a versão Chrome Versão 83.0.4103.61 :

Ferramentas do desenvolvedor do Chrome - Listener de eventos

  1. Selecione o elemento que você deseja inspecionar

  2. Escolha a guia Event Listeners

  3. Verifique os ouvintes do Framework para mostrar o arquivo javascript real em vez da função jquery.


6

Edit : em vez de minha própria resposta, esta é excelente: Como depurar ligações de eventos JavaScript / jQuery com Firebug (ou ferramenta similar)

As ferramentas de desenvolvedor do Google Chromes têm uma função de pesquisa incorporada na seção de scripts

Se você não estiver familiarizado com esta ferramenta: (apenas no caso)

  • clique com o botão direito do mouse em qualquer lugar da página (no chrome)
  • clique em 'Inspecionar elemento'
  • clique na guia 'Scripts'
  • Barra de pesquisa no canto superior direito

Fazer uma pesquisa rápida pelo #ID deve levá-lo à função de ligação eventualmente.

Ex: pesquisar #foolevaria você para

$('#foo').click(function(){ alert('bar'); })

insira a descrição da imagem aqui


4
Bom começo, mas e se eu tiver 1500 referências a #foo, a maioria delas que não vincula nada, ou no caso de eu ter vários IDs #foo em scripts externos que não são acionados no presente caso?
precisa saber é o seguinte

Ótima pergunta. Na minha experiência, que é onde o processo de depuração humano geralmente começa :)
Michael Jasper

1
Hehe, você está certo, mas a minha pergunta era também sobre o que devo fazer como um ser humano: p
FMaz008


4

findEventHandlers é um plugin jquery, o código bruto está aqui: https://raw.githubusercontent.com/ruidfigueiredo/findHandlersJS/master/findEventHandlers.js

Passos

  1. Cole o código bruto diretamente no console do chrome (nota: o jquery já deve estar carregado)

  2. Use a seguinte chamada de função: findEventHandlers(eventType, selector);
    para localizar o manipulador eventType do elemento especificado do seletor correspondente.

Exemplo :

findEventHandlers("click", "#clickThis");

Se houver, o manipulador de eventos disponível será exibido abaixo. Você precisa expandir para encontrar o manipulador, clique com o botão direito do mouse na função e selecione show function definition

Veja: https://blinkingcaret.wordpress.com/2014/01/17/quickly-finding-and-debugging-jquery-event-handlers/


3

Para a versão 52.0.2743.116 do Chrome:

  1. Nas Ferramentas de desenvolvedor do Chrome, abra o painel 'Pesquisar' pressionando Ctrl+ Shift+ F.

  2. Digite o nome do elemento que você está tentando encontrar.

Os resultados para elementos vinculados devem aparecer no painel e indicar o arquivo em que estão localizados.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.