Ich habe zwei großartige Artikel gefunden, die über die neue Funktion sprechen .on()
: jquery4u.com , elijahmanor.com .
Gibt es eine Möglichkeit, wo das .bind()
Still besser zu bedienen ist als .on()
?
Zum Beispiel habe ich einen Beispielcode, der so aussieht:
$("#container").click( function( e ) {} )
Sie können feststellen, dass nur ein Element vom Selektor abgerufen wurde und in meinem Fall der <div>
Name #container
bereits vorhanden ist, als meine Seite geladen wurde. nicht dynamisch hinzugefügt. Es ist wichtig zu erwähnen, dass ich die neueste Version von jQuery verwende: 1.7.2.
Sollte für dieses Beispiel verwendet .on()
werden, anstatt .bind()
auch wenn ich die anderen von der .on()
Funktion bereitgestellten Funktionen nicht verwende?
javascript
jquery
jquery-selectors
Samuel
quelle
quelle
.bind()
schlecht das Binden mehrerer Elemente ist, es wird jedoch nicht erwähnt, wie.on()
im Bindungsmodus genau dasselbe ausgeführt wird.Antworten:
Intern wird
.bind
direkt auf.on
die aktuelle Version von jQuery abgebildet. (Das Gleiche gilt für.live
.) Es gibt also einen winzigen, aber praktisch unbedeutenden Leistungseinbruch, wenn Sie.bind
stattdessen verwenden.Allerdings
.bind
kann von zukünftigen Versionen jederzeit wieder entfernt. Es gibt keinen Grund, weiter zu verwenden,.bind
und jeden Grund,.on
stattdessen zu bevorzugen .quelle
.bind
und.on
sind für nicht delegierte Veranstaltungen identisch;.bind
bietet keine Art von Verknüpfung wie$.getJSON
tutDiese Snippets funktionieren alle genau gleich:
Sie unterscheiden sich jedoch stark von diesen, die alle dasselbe ausführen:
Der zweite Satz von Ereignishandlern verwendet die Ereignisdelegierung und funktioniert für dynamisch hinzugefügte Elemente. Event-Handler, die Delegierung verwenden, sind auch viel leistungsfähiger. Der erste Satz funktioniert nicht für dynamisch hinzugefügte Elemente und ist für die Leistung viel schlechter.
Die
on()
Funktion von jQuery führt keine neuen Funktionen ein, die noch nicht vorhanden waren. Es handelt sich lediglich um einen Versuch, die Ereignisbehandlung in jQuery zu standardisieren (Sie müssen sich nicht mehr zwischen Live, Binden oder Delegieren entscheiden).quelle
$('selector').live('click', function () { ... });
damit du das Ergebnis so nah wie möglich identisch hältst.Die direkten Methoden und
.delegate
sind APIs überlegen.on
und es besteht keine Absicht, sie zu verwerfen.Die direkten Methoden sind vorzuziehen, da Ihr Code weniger streng typisiert wird. Sie erhalten sofort eine Fehlermeldung, wenn Sie einen Ereignisnamen anstelle eines stillen Fehlers falsch eingeben. Meiner Meinung nach ist es auch einfacher zu schreiben und zu lesen
click
alson("click"
Das
.delegate
ist.on
aufgrund der Reihenfolge des Arguments überlegen :Sie wissen sofort, dass es delegiert ist, weil es heißt, delegieren. Sie sehen auch sofort den Selektor.
Mit
.on
es ist klar , nicht sofort , wenn es sogar delegiert hat , und Sie müssen Blick auf das Ende für den Wähler:Jetzt ist die Benennung von
.bind
wirklich schrecklich und zum Nennwert schlechter als.on
. Es.delegate
können jedoch keine nicht delegierten Ereignisse ausgeführt werden, und es gibt Ereignisse, die keine direkte Methode haben. In seltenen Fällen kann diese verwendet werden, jedoch nur, weil Sie eine saubere Trennung zwischen delegierten und nicht delegierten Ereignissen vornehmen möchten.quelle
Wenn Sie im Quellcode nachsehen, werden
$.fn.bind
Sie feststellen, dass es sich nur um eine Umschreibfunktion handelt füron
:http://james.padolsey.com/jquery/#v=1.7.2&fn=$.fn.bind
quelle
Aus der jQuery-Dokumentation:
http://api.jquery.com/bind/
quelle
Ab Jquery 3.0 und höher ist .bind veraltet und sie bevorzugen stattdessen die Verwendung von .on. Als @Blazemonger früher antwortete, dass es entfernt werden kann und es sicher ist, dass es entfernt wird. Für die älteren Versionen würde .bind auch intern .on aufrufen und es gibt keinen Unterschied zwischen ihnen. Bitte beachten Sie auch die API für weitere Details.
jQuery API-Dokumentation für .bind ()
quelle