O que acontece se eu vincular dois manipuladores de eventos ao mesmo evento para o mesmo elemento?
Por exemplo:
var elem = $("...")
elem.click(...);
elem.click(...);
O último manipulador "vence" ou os dois manipuladores serão executados?
javascript
jquery
event-handling
flybywire
fonte
fonte
jQuery('.btn').on('click',handlerClick);
chamado seja chamado em vários locais sem, na verdade.off
, para onde?bind
método Veja isto para obter detalhes: learn.jquery.com/jquery-ui/widget-factory/…Suponha que você tenha dois manipuladores, f e g , e quer se certificar de que eles são executados em uma ordem conhecida e fixa, em seguida, basta encapsular-los:
Dessa maneira, existe (da perspectiva do jQuery) apenas um manipulador, que chama f e g na ordem especificada.
fonte
.bind () do jQuery é acionado na ordem em que foi vinculado :
Fonte: http://api.jquery.com/bind/
Como as outras funções do jQuery (por exemplo
.click()
) são atalhos para.bind('click', handler)
, eu acho que elas também são acionadas na ordem em que estão vinculadas.fonte
Você deve poder usar encadeamento para executar os eventos em sequência, por exemplo:
Eu acho que o código abaixo está fazendo o mesmo
Fonte: http://www.peachpit.com/articles/article.aspx?p=1371947&seqNum=3
O TFM também diz:
fonte
When an event reaches an element, all handlers bound to that event type for the element are fired. If there are multiple handlers registered, they will always execute in the order in which they were bound. After all handlers have executed, the event continues along the normal event propagation path.
Ambos os manipuladores são chamados.
Você pode estar pensando em associação de eventos em linha (por exemplo,
"onclick=..."
), onde uma grande desvantagem é que apenas um manipulador pode ser definido para um evento.O jQuery está em conformidade com o modelo de registro de eventos do DOM Nível 2 :
fonte
Fez funcionar com sucesso usando os 2 métodos: encapsulamento do Stephan202 e ouvintes de vários eventos. Eu tenho 3 guias de pesquisa, vamos definir os IDs de entrada de texto em uma matriz:
Quando o conteúdo do searchtab1 for alterado, desejo atualizar o searchtab2 e o searchtab3. Isso foi feito para o encapsulamento:
Vários ouvintes de eventos:
Eu gosto dos dois métodos, mas o programador escolheu o encapsulamento, no entanto, vários ouvintes de eventos também funcionaram. Usamos o Chrome para testá-lo.
fonte
Existe uma solução alternativa para garantir que um manipulador ocorra após outro: conecte o segundo manipulador a um elemento que contém e deixe o evento borbulhar. No manipulador anexado ao contêiner, você pode olhar para event.target e fazer algo, se for esse o seu interesse.
Rude, talvez, mas definitivamente deve funcionar.
fonte
O jquery executará os dois manipuladores, pois permite vários manipuladores de eventos. Eu criei um código de exemplo. Você pode experimentá-lo
demonstração
fonte