Para aplicaciones web ajax que tienen muchas pantallas y navegaciones, para adjuntar manejadores de eventos para div o enlaces o botones, podemos codificar :jQuery registra automáticamente controlador (es) de eventos a acciones del usuario en elementos que se agregan a DOM por respuesta Ajax
//Using $.on inside Ajax success handler
$("#container").on("click", "#selector", function(event){
});
este enfoque no funcionará si contenedor no existe en el DOM. Para hacerlo funcionar, tendrá que usar documento o cuerpo como contenedor, el rendimiento puede no ser bueno.
Puede haber muchas líneas de código en el controlador de éxito Ajax. Para organizar mejor, puede mover el código a una función y llamar a esa función en el controlador de éxito Ajax. Pero tenemos que hacer muchas funciones de eventos de registro para todas las permutaciones y combinaciones.
Funciones de registro de desorden de códigos.
Si el controlador de eventos ya estaba registrado, el registro nuevamente causará dos controladores pares. Entonces, tenemos que cancelar el registro y registrar (O adjuntar solo si ya no está adjunto) - No estoy seguro sobre el problema de rendimiento.
¿Alguna otra alternativa?
Pienso en lo siguiente:
- Mantener un mapa de contenedor, de destino y haga clic en controlador de eventos en un solo lugar para un módulo.
En el controlador de eventos globales ajaxComplete, si xhr.responseHTML tiene el contenedor, adjunte el controlador de eventos a los elementos de destino (adjunte solo si ya no está adjunto).
$(document).ajaxComplete(function(e, xhr, settings){ for(ind in clickEventListeners){eventlistner = clickEventListeners[ind]; if($(eventlistner.container,xhr.responseHTML).length > 0){ $(eventlistner.target).on("click",function(){ eventlistner.processor(this); }); } } });
Pros: Todos los controladores de eventos documentados en un lugar por un módulo. Sin código desordenado para cada controlador de éxito de Ajax.
Contras: No estoy seguro si alguno.
Por favor, avise si hay alguna sugerencia.
Respuesta actualizada para proporcionar más de una explicación – Jesse
Gran respuesta y buenos enlaces de referencia. +1 –
$ ("# contenedor"). Delegado ("#selector", "clic" ... Debería mejorar el rendimiento. Como pocos eventos aparecerán hasta #container y se tendrán que realizar menos comprobaciones. –