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.