jQuery registra automáticamente el (los) controlador (es) de eventos en las acciones del usuario en los elementos que se agregan a DOM mediante la respuesta Ajax

Para la aplicación web ajax que tiene muchas pantallas y navegaciones, para adjuntar controladores de eventos para div o enlaces o botones, podemos codificar como:

//Using $.on inside Ajax success handler

$("#container").on("click", "#selector", function(event){

});

Este enfoque NO funcionará si el contenedor no existe en el DOM. Para que funcione, tendrá que usar el documento o el cuerpo como contenedor, el rendimiento puede no ser bueno.

Podría haber muchas líneas de código en el controlador de éxito Ajax. Para organizarse 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 registro de eventos para todas las permutaciones y combinaciones.

Registro de funciones de saturación de códigos.

Si el controlador de eventos ya estaba registrado, el registro nuevamente causará dos controladores iguales. Por lo tanto, debemos cancelar el registro y registrarse (O adjuntar solo si no está adjunto) - No estamos seguros sobre el problema de rendimiento.

¿Alguna alternativa?

Estoy pensando en seguir:

Mantenga un mapa del contenedor, destino y haga clic en el controlador de eventos en un lugar para un módulo.

En el controlador de eventos global ajaxComplete, si xhr.responseHTML tiene el contenedor, adjunte el controlador de eventos a los elementos de destino (adjunte solo si no está adjunto ya).

$(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 solo lugar para un módulo. No hay saturación de código en cada controlador de éxito ajax.

Contras: No estoy seguro si alguno.

Por favor avise si tiene alguna sugerencia.

Respuestas a la pregunta(3)

Su respuesta a la pregunta