Preciso depurar um aplicativo Web que use jQuery para fazer alguma manipulação DOM bastante complexa e confusa . A certa altura, alguns dos eventos vinculados a elementos específicos não são acionados e simplesmente param de funcionar.
Se eu tivesse a capacidade de editar a fonte do aplicativo, faria uma pesquisa detalhada e adicionaria várias console.log()
instruções do Firebug e comentar / descomentar partes do código para tentar identificar o problema. Mas vamos supor que eu não possa editar o código do aplicativo e precise trabalhar inteiramente no Firefox usando o Firebug ou ferramentas semelhantes.
O Firebug é muito bom em me permitir navegar e manipular o DOM. Até agora, porém, não consegui descobrir como fazer a depuração de eventos com o Firebug. Especificamente, eu só quero ver uma lista de manipuladores de eventos vinculados a um elemento específico em um determinado momento (usando pontos de interrupção do Firebug JavaScript para rastrear as alterações). Mas o Firebug não tem a capacidade de ver eventos vinculados ou sou muito burro para encontrá-lo. :-)
Alguma recomendação ou idéia? Idealmente, gostaria de ver e editar eventos vinculados a elementos, da mesma forma que posso editar o DOM hoje.
if (window.console)
no caso de ser deixado no código (muito mais fácil de fazer do que com alert ()) e interromper o IE.$('#foo').click(function(event) { var events = $(this).data('events'); $.each(events, function(event, handlers) { $.each(handlers, function(key, handlerObj) { console.log("--------------------------------------"); console.log(event+"["+key+"] | "+handlerObj.handler) ; }); });
Existe um bom bookmarklet chamado Visual Event que pode mostrar todos os eventos anexados a um elemento. Possui destaques codificados por cores para diferentes tipos de eventos (mouse, teclado etc.). Quando você passa o mouse sobre eles, ele mostra o corpo do manipulador de eventos, como foi anexado e o número do arquivo / linha (no WebKit e Opera). Você também pode acionar o evento manualmente.
Ele não consegue encontrar todos os eventos porque não há uma maneira padrão de procurar quais manipuladores de eventos estão anexados a um elemento, mas funciona com bibliotecas populares como jQuery, Prototype, MooTools, YUI etc.
fonte
Você poderia usar o FireQuery . Ele mostra todos os eventos anexados aos elementos DOM na guia HTML do Firebug. Ele também mostra todos os dados anexados aos elementos
$.data
.fonte
Aqui está um plugin que pode listar todos os manipuladores de eventos para qualquer elemento / evento:
Use-o assim:
Src: (meu blog) -> http://james.padolsey.com/javascript/debug-jquery-events-with-listhandlers/
fonte
O Console do desenvolvedor do WebKit (encontrado no Chrome, Safari etc.) permite exibir eventos anexados para elementos.
Mais detalhes nesta pergunta de estouro de pilha
fonte
Use
$._data(htmlElement, "events")
no jquery 1.7+;ex:
$._data(document, "events")
ou$._data($('.class_name').get(0), "events")
fonte
Como sugeriu um colega, console.log> alert:
fonte
O jQuery armazena eventos do seguinte modo:
Fazer a
console.log($("a#somefoo").data("events"))
deve listar os eventos anexados a esse elemento.fonte
Usando o DevTools no Chrome mais recente (v29), considero estas duas dicas muito úteis para a depuração de eventos:
Listando eventos jQuery do último elemento DOM selecionado
Utilizando o Comando monitorEvents ()
fonte
Parece que a equipe do FireBug está trabalhando em uma extensão do EventBug. Ele adicionará outro painel ao FireBug - Events.
"O painel de eventos listará todos os manipuladores de eventos na página agrupados por tipo de evento. Para cada tipo de evento, você pode abrir para ver os elementos aos quais os ouvintes estão vinculados e o resumo da fonte da função." EventBug Rising
Embora eles não possam dizer agora quando será lançado.
fonte
Também encontrei o jQuery Debugger na loja do Chrome. Você pode clicar em um item dom e ele mostrará todos os eventos associados a ele, juntamente com a função de retorno de chamada. Eu estava depurando um aplicativo em que os eventos não estavam sendo removidos corretamente e isso me ajudou a encontrá-lo em questão de minutos. Obviamente, isso é para o Chrome, não para o Firefox.
fonte
ev
ícone ao lado de elementosNo painel Inspetor das Ferramentas para Desenvolvedor do Firefox , lista todos os eventos vinculados a um elemento.
Primeiro, selecione um elemento com Ctrl+ Shift+ C, por exemplo, a seta upvote do Stack Overflow.
Clique no
ev
ícone à direita do elemento e uma caixa de diálogo é aberta:Clique no
||
símbolo do sinal de pausa para o evento desejado e isso abre o depurador na linha do manipulador.Agora você pode colocar um ponto de interrupção lá como de costume no depurador, clicando na margem esquerda da linha.
Isso é mencionado em: https://developer.mozilla.org/en-US/docs/Tools/Page_Inspector/How_to/Examine_event_listeners
Infelizmente, não consegui encontrar uma maneira de jogar bem com a prettyfication, apenas parece abrir na linha reduzida: Como embelezar Javascript e CSS no Firefox / Firebug?
Testado no Firefox 42.
fonte
De acordo com este segmento , no Firebug não há como ver quais eventos estão anexados aos ouvintes em um elemento DOM.
Parece que o melhor que você pode fazer é o que tj111 sugere ou pode clicar com o botão direito do mouse no elemento no visualizador de HTML e clicar em "Log Events" para poder ver quais eventos estão disparando para um elemento DOM específico. Suponho que alguém poderia fazer isso para ver quais eventos poderiam estar disparando funções específicas.
fonte
Com a versão 2.0, o Firebug introduziu um painel Eventos , que lista todos os eventos para o elemento atualmente selecionado no painel HTML .
Ele também pode exibir ouvintes de eventos agrupados em ligações de eventos jQuery, caso a opção Mostrar ouvintes agrupados esteja marcada, que você pode acessar através do menu de opções do painel Eventos .
Com esse painel, o fluxo de trabalho para depurar um manipulador de eventos é o seguinte:
=> A execução do script será interrompida na primeira linha da função do manipulador de eventos e você poderá depurar a etapa.
fonte
O Firebug 2 agora incorpora depuração / inspeção de eventos DOM.
fonte