J'utilise Chrome et mon propre site web.
1 ) J'ai un formulaire où les personnes s'inscrivent en cliquant sur ce bouton d'image orange:
2 ) Je l'inspecte, et c'est tout ce qu'il est: <img class="formSend" src="images/botoninscribirse2.png">
3 ) En haut du code source, il y a beaucoup de sources de script. Bien sûr, je sais lequel appelle le bouton, je l'ai codé : <script src="js/jquery2.js" type="text/javascript"></script>
4 ) Dans ce fichier, vous pouvez trouver: $(".formSend").click(function() { ... });
Qui est ce qui est déclenché par le bouton (pour effectuer une validation de formulaire assez complexe et soumettre) et ce que je veux, c'est de pouvoir trouver cela en utilisant des outils chrome dev sur n'importe quel site Web.
Comment pouvons-nous savoir où appelle l'élément?
Ensuite, j'ai essayé de regarder les écouteurs de l'événement de clic, ce qui m'a semblé un pari sûr, mais … il n'y a pas de jquery2.js
là-dedans (et je ne saurais vraiment pas quel fichier le code est donc je perdrais le temps de vérifier tous celles-ci…):
My $(".formSend").click(function() { ... });
La fonction dans le fichier jquery2.js
n'est pas là.
Jesse explique pourquoi dans sa réponse :
"Enfin, la raison pour laquelle votre fonction n'est pas directement liée au gestionnaire d'événement de clic est parce que jQuery renvoie une fonction qui se lie. La fonction de jQuery à son tour passe par des couches et des contrôles d'abstraction, et quelque part là-bas, elle exécute votre fonction".
EDIT: J'ai recueilli toutes les méthodes que cette question a soulevées dans une réponse ci-dessous comme suggéré par certains d'entre vous.
La réponse d'Alexander Pavlov est la plus proche de ce que vous voulez.
En raison de l'extensibilité de l'abstraction et de la fonctionnalité de jQuery, beaucoup de cercles doivent être sautés pour arriver à la viande de l'événement. J'ai mis en place ce jsFiddle pour démontrer le travail.
Vous étiez proche de celui-ci.
Chrome Dev Tools mettra en pause l'exécution du script et vous présentera ce magnifique enchevêtrement du code minifié:
(Cliquer pour agrandir)
Maintenant, l'astuce ici est de ne pas se laisser entraîner en appuyant sur la touche et de garder un œil sur l'écran.
Je n'ai pas la réponse exacte ou l'explication de pourquoi jQuery parcourt les nombreuses couches d'abstractions qu'il fait – tout ce que je peux suggérer, c'est que c'est à cause du travail qu'il effectue pour abstraire son utilisation du navigateur exécutant le code .
Voici un jsFiddle avec une version de débogage de jQuery (c'est-à-dire non minifié). Lorsque vous regardez le code sur le premier point d'arrêt (non-minifié), vous pouvez voir que le code gère bien des choses:
// ...snip... if ( !(eventHandle = elemData.handle) ) { eventHandle = elemData.handle = function( e ) { // Discard the second event of a jQuery.event.trigger() and // when an event is called after a page has unloaded return typeof jQuery !== strundefined && jQuery.event.triggered !== e.type ? jQuery.event.dispatch.apply( elem, arguments ) : undefined; }; } // ...snip...
La raison pour laquelle je pense que vous l'avez manqué lors de votre tentative lorsque «l' exécution s'arrête et je saute ligne par ligne », c'est parce que vous avez peut-être utilisé la fonction «Step Over» au lieu de Step In. Voici une réponse StackOverflow expliquant les différences.
Enfin, la raison pour laquelle votre fonction n'est pas directement liée au gestionnaire d'événement de clic est parce que jQuery renvoie une fonction qui se lie. La fonction de jQuery à son tour passe par des couches d'abstraction et des contrôles, et quelque part là-bas, elle exécute votre fonction.
Voici quelques solutions:
Framework blackboxing:
jquery\..*\.js
(traduction humaine : jquery.*.js
) jquery\..*\.js|include\.postload\.js
. Ou continuez de les ajouter avec le bouton "Ajouter". En savoir plus sur ceci : https://developer.chrome.com/devtools/docs/blackboxing
Conseil de bonus : j'utilise Regex101 pour tester rapidement mes profils de regex rouillés et savoir où je me trompe avec le débogueur étape par étape de Regex. Il y en a d'autres bien sûr.
Événement visuel :
Favoris personnels. Cela fonctionne merveilleusement, mais c'est une extension, il n'utilise pas les Outils de développement de Chrome. Juste FYI.
Ouvrir les outils de développement -> onglet Sources, et à droite, trouvez les Event Listener Breakpoints
:
Développez la Mouse
et cliquez sur … eh bien, click
.
Je suis toujours laissé avec Ctr + Shift + F (recherche de texte dans toutes les sources) et la recherche de #envio
ou quelle que soit la tag / id que vous pensez commencer la partie, en lisant tous les résultats pour essayer de déterminer quel code pourrait fonctionner , se sentir un perdant Et le sentiment qu'il doit y avoir un moyen sûr de savoir vraiment ce qui est déclenché par le bouton.
Mais soyez conscient, il n'y a pas seulement un img
mais des tonnes de divs
chevauchant, et vous ne pouvez même pas savoir ce qui déclenche le code. Vous ne devriez probablement pas avoir à utiliser cette méthode.
Cela ressemble à "… et je saute en ligne par ligne …" la partie est fausse. Faites-vous StepOver ou StepIn et êtes-vous sûr de ne pas manquer accidentellement l'appel pertinent?
Cela dit, les cadres de débogage peuvent être fastidieux pour cette raison exactement. Pour atténuer le problème, vous pouvez activer l'expérience "Activer les contours de débogage" . Bon débogage! 🙂
Vous pouvez utiliser FindHandlersJS
Vous pouvez trouver le gestionnaire en effectuant dans la console Chrome:
findEventHandlers("click", "img.envio")
Vous obtiendrez les informations suivantes imprimées dans la console Chrome:
Plus d'informations ici et vous pouvez l'essayer dans ce site exemple ici .