¿Qué sucede si enlazo dos controladores de eventos al mismo evento para el mismo elemento?
Por ejemplo:
var elem = $("...")
elem.click(...);
elem.click(...);
¿El último controlador "gana" o se ejecutarán ambos controladores?
javascript
jquery
event-handling
flybywire
fuente
fuente
jQuery('.btn').on('click',handlerClick);
se llama en varios lugares sin que realmente.off
sea de otro modo?bind
método. Vea esto para más detalles: learn.jquery.com/jquery-ui/widget-factory/…Suponga que tiene dos manejadores, f y g , y desea asegurarse de que se ejecutan en un orden conocido y fijo, luego simplemente encapsúlelos:
De esta manera hay (desde la perspectiva de jQuery) solo un controlador, que llama a f y g en el orden especificado.
fuente
El .bind () de jQuery se dispara en el orden en que se enlazó :
Fuente: http://api.jquery.com/bind/
Debido a que las otras funciones de jQuery (ej.
.click()
) Son atajos para.bind('click', handler)
, supongo que también se activan en el orden en que están vinculados.fuente
Debería poder usar el encadenamiento para ejecutar los eventos en secuencia, por ejemplo:
Supongo que el siguiente código está haciendo lo mismo
Fuente: http://www.peachpit.com/articles/article.aspx?p=1371947&seqNum=3
TFM también dice:
fuente
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.
Se llama a ambos manejadores.
Puede estar pensando en el enlace de eventos en línea (p
"onclick=..."
. Ej. ), Donde un gran inconveniente es que solo se puede configurar un controlador para un evento.jQuery se ajusta al modelo de registro de eventos DOM Nivel 2 :
fuente
Lo hizo funcionar con éxito utilizando los 2 métodos: encapsulación de Stephan202 y oyentes de eventos múltiples. Tengo 3 pestañas de búsqueda, definamos sus ID de texto de entrada en una matriz:
Cuando el contenido de searchtab1 cambia, quiero actualizar searchtab2 y searchtab3. Lo hizo de esta manera para la encapsulación:
Oyentes de múltiples eventos:
Me gustan ambos métodos, pero el programador eligió la encapsulación, sin embargo, varios oyentes de eventos también funcionaron. Usamos Chrome para probarlo.
fuente
Hay una solución alternativa para garantizar que un controlador suceda después de otro: adjunte el segundo controlador a un elemento contenedor y deje que el evento brote. En el controlador adjunto al contenedor, puede mirar event.target y hacer algo si es lo que le interesa.
Crudo, tal vez, pero definitivamente debería funcionar.
fuente
jquery ejecutará ambos manejadores ya que permite múltiples manejadores de eventos. He creado un código de muestra. Puedes probarlo
manifestación
fuente