J'utilise Chrome et mon propre site Web.
1 ) J'ai un formulaire où les gens s'inscrivent en cliquant sur ce bouton image orange:
2 ) Je l'inspecte, et c'est tout ce dont il s'agit: <img class="formSend" src="images/botoninscribirse2.png">
3 ) Au sommet du code source, il y a des tonnes de sources de script. Bien sûr, je sais lequel du bouton appelle, 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 déclenché par le bouton (pour effectuer une validation de formulaire assez complexe et submit) et ce que je veux, c'est pouvoir le trouver à l'aide de chrome outils de développement sur n'importe quel site Web.
Comment pouvons-nous savoir où l'appel de l'élément?
Alors j'ai alors essayé de regarder les écouteurs d'événements de clic, ce qui semblait être une valeur sûre pour moi mais ... il n'y a pas de jquery2.js
là-dedans (et je ne saurais pas vraiment de quel fichier le code est, donc je perdrais du temps vérifiant tous ces ...):
Ma fonction $(".formSend").click(function() { ... });
dans le fichier jquery2.js
n'y est pas.
Jesse explique pourquoi dans sa réponse :
"Enfin, la raison pour laquelle votre fonction n'est pas directement liée au gestionnaire d'événements click est que jQuery renvoie une fonction qui est liée. La fonction de jQuery passe à son tour à travers des couches d'abstraction et des contrôles, et quelque part à l'intérieur. , il exécute votre fonction. "
EDIT: J'ai rassemblé toutes les méthodes utilisées pour poser cette question dans l'une des réponses ci-dessous suggérées par certains d'entre vous.
Fonctionne très bien, juste un peu de mise en place, mais pas de tiers.
Modifier : Depuis l'écriture de cette solution, Chrome (et d'autres navigateurs aussi, j'en suis sûr) a facilité la tâche des scripts de boîte noire.
Selon documentation de Chrome :
Qu'est-ce qui se passe quand vous blackbox un script?
Les exceptions levées à partir du code de la bibliothèque ne seront pas mises en pause (si l'option Pause sur les exceptions est activée). Dans le code de la bibliothèque, le débogueur ne fera pas de pause sur les points d'arrêt définis dans le code de la bibliothèque. Le résultat final est que vous déboguez le code de votre application au lieu de ressources tierces.
Voici le flux de travail mis à jour:
jquery\..*\.js
(( human translation: jquery.*.js
)jquery\..*\.js|include\.postload\.js
. Ou continuez simplement à les ajouter avec le bouton "Ajouter".Astuce bonus : J'utilise Regex101 (mais il y en a beaucoup d'autres) pour tester rapidement mes motifs de regex rouillés et découvrir où 'ai tort avec le débogueur pas à pas regex.
Vous pouvez également utiliser le menu contextuel lorsque vous travaillez dans le panneau Sources. Lors de la visualisation d'un fichier, vous pouvez cliquer avec le bouton droit de la souris sur l'éditeur. Et vous pouvez cliquer avec le bouton droit sur un fichier dans le navigateur de fichiers. À partir de là, choisissez Blackbox Script. Cela ajoutera le fichier à la liste dans le panneau Paramètres:
Ce genre de douloureux mais facile ( blackboxing se révélera très efficace ici).
Ouvrez Outils de développement -> onglet Sources et à droite, trouvez Event Listener Breakpoints
:
Développez Mouse
et cliquez sur ... eh bien, click
.
Je reste toujours avec ⌘+⌥+F ou:
et en recherchant #envio
ou quelle que soit la balise/la classe/l’id que vous pensez a commencé la fête, en lisant toutes les constatations pour essayer de déterminer quel code pourrait être utilisé , se sentir perdant et le sentiment qu'il doit exister un moyen sûr de vraiment savoir QUOI est déclenché par le bouton.
Mais sachez que parfois, il y a non seulement une img
mais des tonnes de divs
qui se chevauchent, et vous ne pouvez même pas savoir ce qui déclenche le code. Vous ne devriez probablement pas avoir à utiliser cette méthode.
Réponse d'Alexander Pavlov se rapproche le plus de ce que vous voulez.
En raison de l’extension de l’abstraction et des fonctionnalités de jQuery, de nombreux obstacles doivent être franchis pour que l’on puisse se rendre au cœur de l’événement. J'ai mis en place ceci jsFiddle pour démontrer le travail.
Vous étiez proche sur celui-ci.
Chrome Dev Tools mettra en pause l'exécution du script et vous présentera ce bel enchevêtrement de code minifié:
Maintenant, le truc ici est de ne pas s'emballer en appuyant sur la touche, et de garder un œil sur l'écran.
Je n'ai pas la réponse exacte, ni l'explication quant à la raison pour laquelle jQuery parcourt les nombreuses couches d'abstractions qu'il fait - tout ce que je peux dire, c'est que c'est à cause du travail qu'il fait pour soustraire son utilisation au navigateur qui exécute le code. .
Voici un jsFiddle avec une version de débogage de jQuery (c'est-à-dire non minifiée). Lorsque vous examinez le code sur le premier point d'arrêt (non minifié), vous constatez qu'il traite de nombreuses 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 avez manqué votre tentative lorsque l'exécution " est suspendue et que je saute ligne par ligne ", c'est parce que vous avez peut-être utilisé la fonction "Pas à pas" au lieu de Intervenir. Voici un réponse StackOverflow expliquant les différences.
Enfin, la raison pour laquelle votre fonction est pas directement liée au gestionnaire d'événements click est que jQuery renvoie une fonction qui est liée. La fonction de jQuery passe à son tour à travers des couches d'abstraction et des vérifications, et quelque part , elle exécute votre fonction.
On dirait que "... et que je saute ligne par ligne ..." est faux. Avez-vous StepOver ou StepIn et êtes-vous sûr de ne pas manquer l'appel accidentellement?
Cela dit, les frameworks de débogage peuvent être fastidieux pour cette raison. Pour atténuer le problème, vous pouvez activer l’expérience "Enable support of debugging support" . Bon débogage! :)
Vous pouvez utiliser findHandlersJS
Vous pouvez trouver le gestionnaire en faisant dans la console chrome:
findEventHandlers("click", "img.envio")
Les informations suivantes seront imprimées dans la console de chrome:
Plus d'infos ici et vous pouvez l'essayer dans cet exemple de site ici .
Cette solution nécessite le méthode de données de jQuery .
$._data($(".example").get(0), "events")
$._data()
n'accède qu'à la méthode de données de jQuery. Une alternative plus lisible pourrait être jQuery._data()
.
Point intéressant par this SO answer :
Depuis jQuery 1.8, les données d'événement ne sont plus disponibles à partir de "l'API publique" pour les données. Lire cet article de blog jQuery . Vous devriez maintenant utiliser ceci à la place:
jQuery._data( elem, "events" );
elem doit être un élément HTML, et non un objet jQuery ou un sélecteur.Veuillez noter qu'il s'agit d'une structure interne "privée" et qu'elle ne devrait pas être modifiée. Utilisez-le uniquement à des fins de débogage.
Dans les anciennes versions de jQuery, vous devrez peut-être utiliser l'ancienne méthode, à savoir:
jQuery( elem ).data( "events" );
Une version agnostique jQuery serait: (jQuery._data || jQuery.data)(elem, 'events');