Jeśli kiedykolwiek dynamicznie generujesz zawartość strony lub ładujesz zawartość przez AJAX, następujący przykład jest naprawdę właściwy:
- Zapobiega podwójnemu wiązaniu w przypadku, gdy skrypt jest ładowany więcej niż raz, na przykład w żądaniu AJAX.
- Powiązanie żyje w
bodydokumencie, więc niezależnie od tego, jakie elementy są dodawane, przenoszone, usuwane i ponownie dodawane, wszystkie elementy potomne bodypasujące do określonego selektora zachowają właściwe powiązanie.
Kod:
var bind_to = ':input';
$(document.body).off('change', bind_to);
$(document.body).on('change keyup', bind_to, function(event) {
alert('something happened!');
});
Proszę zauważyć! Używam $.on()i $.off()zamiast innych metod z kilku powodów:
$.live()i $.die()są przestarzałe i zostały pominięte w nowszych wersjach jQuery.
- Musiałbym albo zdefiniować oddzielną funkcję (w ten sposób zaśmiecając globalny zakres) i przekazać tę funkcję do obu
$.change()i $.keyup()osobno, albo przekazać tę samą deklarację funkcji do każdej wywoływanej funkcji; Powielanie logiki ... Co jest absolutnie niedopuszczalne.
- Jeśli elementy zostaną kiedykolwiek dodane do DOM,
$.bind()nie wiąże się dynamicznie z elementami podczas ich tworzenia. Dlatego jeśli połączysz się z, :inputa następnie dodasz wejście do DOM, ta metoda wiązania nie zostanie dołączona do nowego wejścia. Następnie musiałbyś jawnie cofnąć wiązanie, a następnie ponownie związać się ze wszystkimi elementami w DOM (w przeciwnym razie wiązania zostaną zduplikowane). Ten proces musiałby być powtarzany za każdym razem, gdy dane wejściowe były dodawane do DOM.