Pergunta

O que ordem de precedência são eventos manipulados em JavaScript?

Aqui estão os acontecimentos em ordem alfabética ...

  1. onabort - Carregamento de uma imagem é interrompido
  2. onblur - Um elemento perde o foco
  3. onchange - O usuário altera o conteúdo de um campo
  4. onclick - mouse clica em um objeto
  5. ondblclick - mouse clica duas vezes em um objeto
  6. onerror - Um erro ocorre quando o carregamento de um documento ou de uma imagem
  7. onfocus - Um elemento recebe foco
  8. onkeydown - Uma tecla do teclado é pressionado
  9. onkeypress - Uma tecla do teclado é pressionado ou pressionado
  10. onkeyup - Uma tecla do teclado é lançado
  11. onload - Uma página ou uma imagem é carregamento acabado
  12. onmousedown - Um botão do mouse é pressionado
  13. onmousemove - O rato é movido
  14. onmouseout - O rato é movido off um elemento
  15. onmouseover - O rato é movido sobre um elemento
  16. onmouseup - Um botão do mouse é lançado
  17. onreset - O botão de reset é clicado
  18. onresize - A janela ou o quadro é redimensionada
  19. onselect - texto é selecionado
  20. onsubmit - O botão enviar é clicado
  21. onunload - O usuário sai da página

O que ordem são tratadas fora da fila de eventos?

A precedência não é first-in-first-out (FIFO) ou então eu acredito.

Foi útil?

Solução

Esta não foi, até onde eu sei, explicitamente definido no passado. Diferentes navegadores são livres para implementar ordenação evento no entanto que entenderem. Enquanto a maioria estão perto o suficiente para todos os efeitos práticos, houve e continuará a haver alguns casos de ponta estranhos onde navegadores diferem um pouco (e, é claro, muitos mais casos em que determinados navegadores não conseguem enviar certos eventos em tudo ).

Dito isto, o HTML 5 projecto de recomendação faz uma tentativa para especificar como os eventos serão enfileirados e despachou - o ciclo de eventos :

Para coordenar eventos, o usuário interação, os scripts, renderização, de rede, e assim por diante, os agentes do utilizador devem usar laço de eventos como descrito em nesta seção.

Deve haver pelo menos um ciclo de eventos por agente de utilizador, e, no máximo, um evento ciclo por unidade de relacionada semelhante de origem contextos de navegação.

Um ciclo de eventos tem uma ou mais tarefas filas. A fila de tarefas é um ordenado lista de tarefas [...] Quando um agente de utilizador é a fila de uma tarefa, ele deve adicionar a tarefa dada a um dos as filas de tarefas do evento relevante ciclo. Todas as tarefas de um em particular fonte tarefa deve ser sempre adicionado à mesma fila de tarefa, mas tarefas de diferentes fontes de tarefas pode ser colocado em diferentes filas de tarefas. [...]

[...] um agente usuário pode ter uma fila de tarefas para mouse e eventos-chave (o usuário tarefa interação fonte), e outra para tudo o resto. O agente de utilizador poderia, então, dar teclado e mouse eventos preferência sobre outras tarefas três quartos do tempo, mantendo a interface sensível, mas não faminto outras filas de tarefas, e nunca processamento de eventos de qualquer uma tarefa fonte para fora de ordem. [...]

Note que duram pouco: cabe à implementação do navegador para determinar quais eventos serão agrupados e processados ??em ordem, bem como a prioridade dada a um determinado tipo de evento. Portanto, há pouca razão para esperar que todos os navegadores para expedição todas eventos em uma ordem fixa, agora ou no futuro.

Outras dicas

Para qualquer um que quer saber a seqüência de eventos relativos obter chamado, veja abaixo. Até agora eu só testei no Chrome.

  1. mouseover
  2. mousemove
  3. mouseout

  1. mousedown
  2. mudança (na entrada focalizado)
  3. blur (no elemento focalizado)
  4. focagem
  5. mouseup
  6. clique
  7. dblclick

  1. keydown
  2. keypress
  3. keyup

Se você está olhando para os eventos do mouse / touch, Patrick H. Lauke publicou uma conversa sobre o assunto . Definitivamente uma leitura interessante -. E lida com todas as peculiaridades de diferentes navegadores, dispositivos diferentes e diferentes padrões

Ele também pacotes um conjunto abrangente de testes .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top