Estou usando o Chrome e meu próprio site.
O que eu sei por dentro:
1 ) Tenho um formulário no qual as pessoas se inscrevem clicando neste botão laranja da imagem:
2 ) Eu inspeciono, e isso é tudo:
<img class="formSend" src="images/botoninscribirse2.png">
3 ) Na parte superior do código fonte, existem inúmeras fontes de script. Eu sei qual o botão chama porque eu o codifiquei:<script src="js/jquery2.js" type="text/javascript"></script>
4 ) Nesse arquivo, você pode encontrar: o $(".formSend").click(function() { ... });
que é acionado pelo botão (para fazer uma validação e envio de formulários bastante complexos) e o que eu quero é poder descobrir isso usando as ferramentas de desenvolvimento do Chrome em qualquer site.
Como posso descobrir para onde o elemento chama?
A guia Ouvintes não funcionou para mim. Então tentei procurar os ouvintes do evento click, o que me pareceu uma aposta segura, mas ... não existe jquery2.js
lá (e eu realmente não saberia qual arquivo é o código, então eu perderia tempo verificando tudo isso .. .):
Minha $(".formSend").click(function() { ... });
função no jquery2.js
arquivo não está lá.
Jesse explica o porquê :
"Finalmente, a razão pela qual sua função não está diretamente vinculada ao manipulador de eventos click é porque o jQuery retorna uma função que é vinculada. A função do jQuery, por sua vez, passa por algumas camadas de abstração e verificações e, em algum lugar, executa sua função . "
Conforme sugerido por alguns de vocês, coletei os métodos que funcionaram em uma resposta abaixo .
fonte
Visual Event
bookmarklet. Ele detecta eventos de clique vinculados por bibliotecas populares e cria uma sobreposição do site, mostrando onde os eventos são vinculados e fornecendo exemplos de código e locais de origem para cada evento.Respostas:
A resposta de Alexander Pavlov chega mais perto do que você deseja.
Devido à extensividade da abstração e funcionalidade do jQuery, muitos aros precisam ser pulados para chegar ao ponto principal do evento. Eu configurei este jsFiddle para demonstrar o trabalho.
1. Configurando o ponto de interrupção do ouvinte de eventos
Você estava perto deste.
2. Clique no botão!
O Chrome Dev Tools interrompe a execução do script e apresenta esse belo emaranhado de códigos minificados:
(clique para ampliar)
3. Encontre o código glorioso!
Agora, o truque aqui é não se deixar levar pela pressão da tecla e ficar de olho na tela.
4. Explicação
Não tenho a resposta exata ou a explicação de por que o jQuery passa por muitas camadas de abstrações - tudo o que posso sugerir é que é por causa do trabalho que faz para abstrair seu uso do navegador que executa o código .
Aqui está um jsFiddle com uma versão de depuração do jQuery (ou seja, não minificado). Quando você olha para o código no primeiro ponto de interrupção (não minificado), pode ver que o código está manipulando muitas coisas:
A razão pela qual acho que você perdeu a tentativa quando a " execução é interrompida e eu pulo linha por linha " é porque você pode ter usado a função "Step Over", em vez de Step In. Aqui está uma resposta StackOverflow explicando as diferenças.
Finalmente, a razão pela qual sua função não está diretamente vinculada ao manipulador de eventos click é porque o jQuery retorna uma função que é vinculada. A função do jQuery, por sua vez, passa por algumas camadas e verificações de abstração e, em algum lugar , executa sua função.
fonte
F11
hits! Agora faz sentido, mas é apenas impraticável. Eu vou corrigir minha pergunta embora.Solução 1: quadro negro de estrutura
Funciona muito bem, configuração mínima e sem terceiros.
De acordo com a documentação do Chrome :
Aqui está o fluxo de trabalho atualizado:jquery\..*\.js
(padrão glob / humano tradução:jquery.*.js
)|
forma:jquery\..*\.js|include\.postload\.js
(que age como um "ou esse padrão", por assim dizer) ou continue adicionando-os com o botão "Adicionar".Você também pode usar o menu de contexto ao trabalhar no painel Origens. Ao visualizar um arquivo, você pode clicar com o botão direito do mouse no editor e escolher Blackbox Script. Isso adicionará o arquivo à lista no painel Configurações:
Solução 2: Evento Visual
É uma excelente ferramenta para ter :
Solução 3: Depuração
Você pode pausar o código quando clicar em algum lugar da página ou quando o DOM for modificado ... e outros tipos de pontos de interrupção JS que serão úteis para conhecer. Você deve aplicar o blackbox aqui para evitar um pesadelo.
Nesse caso, quero saber o que acontece exatamente quando clico no botão.
Abra a ferramenta Dev Tools -> Sources e, à direita, encontre
Event Listener Breakpoints
:Expanda
Mouse
e selecioneclick
Solução 4: pescar palavras-chave
Com o Dev Tools ativado, você pode pesquisar toda a base de código (todo o código em todos os arquivos) com ⌘+ ⌥+ Fou:
e pesquisar
#envio
ou qualquer que seja a tag / classe / ID que você acha que começa a festa e você pode chegar a um lugar mais rápido do que o previsto.Esteja ciente de que, às vezes, não há apenas
img
muitos elementos empilhados e talvez você não saiba qual deles aciona o código.Se isso estiver um pouco fora do seu conhecimento, dê uma olhada no tutorial do Chrome sobre depuração .
fonte
Parece que a parte "... e eu pulo linha por linha ..." está errada. Você faz StepOver ou StepIn e tem certeza de que não perdeu acidentalmente a chamada relevante?
Dito isto, as estruturas de depuração podem ser tediosas exatamente por esse motivo. Para aliviar o problema, você pode habilitar o experimento "Habilitar suporte a depuração de estruturas" . Feliz depuração! :)
fonte
Você pode usar o findHandlersJS
Você pode encontrar o manipulador fazendo no console do chrome:
findEventHandlers("click", "img.envio")
Você obterá as seguintes informações impressas no console do chrome:
O elemento real em que o manipulador de eventos foi registrado
matriz de eventos com informações sobre os manipuladores de eventos jquery para o tipo de evento em que estamos interessados (por exemplo, clique, altere etc.)
Método real do manipulador de eventos que você pode ver clicando com o botão direito do mouse e selecionando Mostrar definição de função
O seletor fornecido para eventos delegados. Estará vazio para eventos diretos.
Lista com os elementos que esse manipulador de eventos tem como alvo. Por exemplo, para um manipulador de eventos delegados registrado no objeto de documento e direcionado a todos os botões em uma página, essa propriedade listará todos os botões na página. Você pode passar o mouse e vê-los realçados no chrome.
Mais informações aqui e você pode experimentá-lo neste site de exemplo aqui .
fonte
Esta solução precisa do método de dados do jQuery .
$._data($(".example").get(0), "events")
$._data()
está apenas acessando o método de dados do jQuery. Uma alternativa mais legível poderia serjQuery._data()
.Ponto interessante por esta resposta SO :
Uma versão independente do jQuery seria:
(jQuery._data || jQuery.data)(elem, 'events');
fonte