Como JQuery criar é Personalizado Eventos e posso recriar em Javascript?
-
02-01-2020 - |
Pergunta
Eu estou olhando para criar eventos em Javascript, utilizando a mesma metodologia JQuery - alguém sabe como JQuery não é?
Meu raciocínio é que, utilizando matérias Javascript como este:
var myEvent = new CustomEvent("userLogin", eventProperties);
...na verdade, não funciona no Android nativo do navegador, que não suporta o Nível 3 de DOM, como o Chrome e outros navegadores.
No Entanto, JQuery não trabalhar no Android ações do navegador, e simplesmente usa:
$.event.trigger('MyEvent');
A minha pergunta é, qual é o código por trás desta?Eu tentei encontrá-lo por meio do fórum código-fonte, mas não é possível colocar minha cabeça em torno dela!
Solução
O fundamental aqui é este:Quando você conectar um manipulador de eventos com jQuery, jQuery não adicionar diretamente o manipulador para o elemento DOM.Em vez disso, jQuery conecta um manipulador do seu próprio no elemento DOM (se já não tiver um no-lo).Quando o evento ocorre, jQuery procura na lista de jQuery gerenciadores registrados para o evento e atira-los em ordem.(Há várias razões para isso;inicialmente, foi principalmente em torno do IE vazamentos de memória e o fato de que o IE demitido processadores em um único pedido, e todos os outros em uma ordem diferente;jQuery assumiu e assegurada a ordem.)
(Você pode ser capaz de ver para onde estou indo com isso...)
Portanto, quando você usa trigger
, jQuery envia o sintético evento para o elemento DOM, mas não confiar no sintético do evento para o trabalho;ele chama os manipuladores você já registrado através de jQuery diretamente.Na verdade, ele define um sinalizador para que ele sabe que ele é feito e que, por isso, se o navegador não enviar o evento para jQuery manipulador para ele, jQuery, sabe-se ignorá-lo (pois ele já fez seu trabalho).
Você pode ver isso em toda a sua glória, começando com a linha de 4,464 o atual descompactado do arquivo jQuery.
Então, basicamente, jQuery construir o seu próprio pub/sub-sistema, e apenas utiliza o navegador de sistema de eventos como uma entrada para ele.Para eventos personalizados não costumo falar para o navegador.