Estoy usando Chrome y mi propio sitio web.
Lo que sé desde adentro:
1 ) Tengo un formulario donde las personas se registran haciendo clic en este botón naranja de imagen:
2 ) Lo inspecciono, y esto es todo lo que es:
<img class="formSend" src="images/botoninscribirse2.png">
3 ) En la parte superior del código fuente, hay toneladas de fuentes de script. Sé a cuál llama el botón porque lo codifiqué:<script src="js/jquery2.js" type="text/javascript"></script>
4 ) Dentro de ese archivo, podría encontrar: $(".formSend").click(function() { ... });
que es lo que se activa mediante el botón (para hacer una validación y envío de formulario bastante complejo) y lo que quiero es poder encontrarlo usando las herramientas de desarrollo de Chrome en cualquier sitio web.
¿Cómo puedo averiguar dónde llama el elemento?
La pestaña de oyentes no funcionó para mí. Entonces traté de buscar a los oyentes de eventos de clic, lo que me pareció una apuesta segura pero ... no hay nada jquery2.js
allí (y realmente no sabría qué archivo es el código, así que perdería el tiempo revisando todo esto ... .):
Mi $(".formSend").click(function() { ... });
función dentro del jquery2.js
archivo no está allí.
Jesse explica por qué :
"Finalmente, la razón por la cual su función no está directamente vinculada al controlador de eventos click es porque jQuery devuelve una función que queda vinculada. La función de jQuery, a su vez, pasa por algunas capas de abstracción y verificaciones, y en algún lugar allí, ejecuta su función ".
Como sugirieron algunos de ustedes, he recopilado los métodos que funcionaron en una respuesta a continuación .
fuente
Visual Event
bookmarklet. Detecta eventos de clic vinculados por bibliotecas populares y crea una superposición del sitio que muestra dónde están vinculados los eventos y proporciona ejemplos de código y ubicaciones de origen para cada evento.Respuestas:
La respuesta de Alexander Pavlov se acerca más a lo que quieres.
Debido a la amplitud de la abstracción y la funcionalidad de jQuery, se deben saltar muchos aros para llegar al meollo del evento. He configurado este jsFiddle para demostrar el trabajo.
1. Configuración del punto de interrupción del oyente de eventos
Estabas cerca de esto.
2. Haga clic en el botón!
Chrome Dev Tools hará una pausa en la ejecución del script y te presentará este hermoso enredo de código minificado:
(haga clic para ampliar)
3. ¡Encuentra el glorioso código!
Ahora, el truco aquí es no dejarse llevar presionando la tecla y estar atento a la pantalla.
4. Explicación
No tengo la respuesta exacta o la explicación de por qué jQuery pasa por las muchas capas de abstracciones que hace; todo lo que puedo sugerir es que es debido al trabajo que hace para abstraer su uso del navegador que ejecuta el código .
Aquí hay un jsFiddle con una versión de depuración de jQuery (es decir, no minimizada). Cuando observa el código en el primer punto de interrupción (no minimizado), puede ver que el código maneja muchas cosas:
La razón por la que creo que te lo perdiste en tu intento cuando "la ejecución se detiene y salto línea por línea ", es porque es posible que hayas utilizado la función "Paso sobre", en lugar de Paso a paso. Aquí hay una respuesta de StackOverflow que explica las diferencias.
Finalmente, la razón por la cual su función no está directamente vinculada al controlador de eventos click es porque jQuery devuelve una función que se vincula. La función de jQuery a su vez pasa por algunas capas de abstracción y verificaciones, y en algún lugar allí, ejecuta su función.
fuente
F11
golpes clave! Ahora tiene sentido, pero no es práctico. Aunque corregiré mi pregunta.Solución 1: blackboxing de framework
Funciona muy bien, configuración mínima y sin terceros.
De acuerdo con la documentación de Chrome :
Aquí está el flujo de trabajo actualizado:jquery\..*\.js
(patrón glob / humano traducción:jquery.*.js
)|
manera:jquery\..*\.js|include\.postload\.js
(que actúa como un "o este patrón", por así decirlo. O continúe agregándolos con el botón "Agregar".También puede usar el menú contextual cuando trabaje en el panel Orígenes. Al ver un archivo, puede hacer clic derecho en el editor y elegir Blackbox Script. Esto agregará el archivo a la lista en el panel Configuración:
Solución 2: evento visual
Es una excelente herramienta para tener :
Solución 3: depuración
Puede pausar el código cuando hace clic en algún lugar de la página, o cuando se modifica el DOM ... y otros tipos de puntos de interrupción JS que serán útiles para conocer. Debes aplicar blackboxing aquí para evitar una pesadilla.
En este caso, quiero saber qué sucede exactamente cuando hago clic en el botón.
Abra Dev Tools -> pestaña Fuentes, y a la derecha encuentre
Event Listener Breakpoints
:Expandir
Mouse
y seleccionarclick
Solución 4: palabras clave de pesca
Con Dev Tools activado, puede buscar en toda la base de código (todo el código en todos los archivos) con ⌘+ ⌥+ Fo:
y buscando
#envio
o cualquiera que sea la etiqueta / clase / id que crees que comienza la fiesta y puedes llegar a algún lugar más rápido de lo previsto.Tenga en cuenta que a veces no solo hay un
img
montón de elementos apilados, y es posible que no sepa cuál activa el código.Si esto está un poco fuera de su conocimiento, eche un vistazo al tutorial de Chrome sobre depuración .
fuente
Parece que la parte "... y salto línea por línea ..." está mal. ¿Hace StepOver o StepIn y está seguro de no perder accidentalmente la llamada relevante?
Dicho esto, los marcos de depuración pueden ser tediosos exactamente por esta razón. Para aliviar el problema, puede habilitar el experimento "Habilitar soporte de depuración de marcos" . Feliz depuración! :)
fuente
Puedes usar findHandlersJS
Puede encontrar el controlador haciendo en la consola de Chrome:
findEventHandlers("click", "img.envio")
Obtendrá la siguiente información impresa en la consola de Chrome:
El elemento real donde se registró el controlador de eventos
Matriz con información sobre los controladores de eventos jquery para el tipo de evento que nos interesa (por ejemplo, hacer clic, cambiar, etc.)
Método de manejador de eventos real que puede ver haciendo clic derecho y seleccionando Mostrar definición de función
El selector proporcionado para eventos delegados. Estará vacío para eventos directos.
Lista con los elementos a los que se dirige este controlador de eventos. Por ejemplo, para un controlador de eventos delegado que está registrado en el objeto del documento y se dirige a todos los botones de una página, esta propiedad enumerará todos los botones de la página. Puede desplazarlos y verlos resaltados en cromo.
Más información aquí y puede probarlo en este sitio de ejemplo aquí .
fuente
Esta solución necesita el método de datos de jQuery .
$._data($(".example").get(0), "events")
$._data()
solo está accediendo al método de datos de jQuery. Una alternativa más legible podría serjQuery._data()
.Punto interesante de esta respuesta SO :
Una versión agnóstica de jQuery sería:
(jQuery._data || jQuery.data)(elem, 'events');
fuente