Pregunta

Estoy buscando crear eventos en JavaScript utilizando la misma metodología que jquery- ¿Alguien sabe cómo lo hace JQERY?

Mi razonamiento es que usar JavaScript RAW, tal:

var myEvent = new CustomEvent("userLogin", eventProperties);

... en realidad no funciona en el navegador nativo de Android, ya que no es compatible con DOM Nivel 3 como Chrome y otros navegadores.

Sin embargo, jquery hace trabajo en el navegador de acciones de Android, y simplemente usa:

$.event.trigger('MyEvent');

Mi pregunta es, ¿qué es el código detrás de esto?Intenté encontrarlo pasando por JQUERY's código fuente , pero¡No puedo tener mi cabeza a su alrededor!

¿Fue útil?

Solución

Lo fundamental aquí es esto: cuando engancha un manejador de eventos con jQuery, JQuery no agrega directamente ese controlador al elemento DOM. En su lugar, Jquery engancha un controlador propio en el elemento DOM (si aún no tiene uno en él). Cuando ocurre el evento, JQERY analiza la lista de manipuladores registrados en jQuery para el evento y los lanzan en orden. (Hay varias razones para esto; Inicialmente, era principalmente alrededor de las fugas de memoria y el hecho de que, es decir, los manipuladores disparados en un orden y todos los demás en un orden diferente; por lo que jquery se hizo cargo y aseguró el orden.)

(es posible que pueda ver a dónde voy con esto ...)

Entonces, cuando usa trigger, JQERY envía el evento sintético al elemento DOM, pero no lo confía en ese evento sintético para trabajar; Llama a los manejadores que has registrado a través de jQuery directamente. De hecho, establece una bandera para que sepa que se hace, por lo que si el navegador hace envía el evento al manejador de Jquery para ello, Jquery sabe ignorarlo (ya que ya está hecho su trabajo) .

Puede ver esto en toda su gloria comenzando con la línea 4,464 de el archivo jquery no comprimido actual .

Básicamente, Jquery's crea su propio PUB / SUB SISTEMA, y solo utiliza el sistema de eventos del navegador como una entrada para ella. Así que los eventos personalizados no suelen tener que hablar con el navegador.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top