jQuery automatycznie rejestruje obsługę zdarzeń do akcji użytkownika na elementach dodawanych do DOM przez odpowiedź Ajax

Dla aplikacji internetowej ajax, która ma wiele ekranów i nawigacji, aby dołączyć obsługę zdarzeń dla div lub łączy lub przycisków, możemy kodować jak:

//Using $.on inside Ajax success handler

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

});

Takie podejście NIE będzie działać, jeśli kontener nie istnieje w DOM. Aby to działało, będzie musiał użyć dokumentu lub ciała jako kontenera, wydajność może nie być dobra.

W programie obsługi sukcesu Ajax może być wiele linii kodu. Aby lepiej zorganizować, można przenieść kod do funkcji i wywołać tę funkcję w programie obsługi Ajax. Ale musimy wykonać wiele funkcji rejestrowania zdarzeń dla wszystkich permutacji i kombinacji.

Zarejestruj funkcje zaśmiecania kodem.

Jeśli obsługa zdarzeń była już zarejestrowana, ponowna rejestracja spowoduje dwie równe procedury obsługi. Musimy więc wyrejestrować się i zarejestrować (LUB załączyć tylko, jeśli nie jest już dołączony) - Nie jestem pewien co do problemu z wydajnością.

Jakieś alternatywy?

Myślę o następujących sprawach:

Utrzymuj mapę modułu obsługi kontenerów, obiektów docelowych i kliknięć w jednym miejscu dla modułu.

W globalnej procedurze obsługi zdarzeń ajaxComplete, jeśli xhr.responseHTML ma kontener, dołącz moduł obsługi zdarzeń do elementów docelowych (dołącz tylko wtedy, gdy nie jest już dołączony).

$(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);
      });
  }
 }
});

Plusy: Wszystkie programy obsługi zdarzeń udokumentowane w jednym miejscu dla modułu. Brak zaśmiecania kodu dla każdej procedury obsługi sukcesów ajax.

Minusy: nie jestem pewien, czy w ogóle.

Proszę doradzić, jeśli jakieś sugestie.

questionAnswers(3)

yourAnswerToTheQuestion