J'ai trouvé deux excellents articles parlant de la nouvelle fonction .on()
: jquery4u.com , elijahmanor.com .
Existe-t-il un moyen où l' .bind()
alambic est préférable d'utiliser que .on()
?
Par exemple, j'ai un exemple de code qui ressemble à ceci:
$("#container").click( function( e ) {} )
Vous pouvez noter que je n'ai qu'un élément récupéré par le sélecteur et dans mon cas, le <div>
nom #container
existe déjà lorsque ma page a été chargée; pas ajouté dynamiquement. Il est important de mentionner que j'utilise la dernière version de jQuery: 1.7.2.
Pour cet exemple, devrait .on()
être utilisé au lieu de .bind()
même si je n'utilise pas les autres fonctionnalités fournies par la .on()
fonction?
.bind()
est mauvais pour lier plusieurs éléments, mais ne mentionne pas comment,.on()
lorsqu'il est utilisé en mode liaison, fait exactement la même chose.Réponses:
En interne,
.bind
correspond directement à.on
dans la version actuelle de jQuery. (Il en va de même pour.live
.) Il y a donc un impact sur les performances minuscule mais pratiquement insignifiant si vous utilisez à la.bind
place.Cependant,
.bind
peut être supprimé des futures versions à tout moment. Il n'y a aucune raison de continuer à utiliser.bind
et toutes les raisons de préférer à la.on
place.la source
.bind
et.on
sont identiques pour les événements non délégués;.bind
ne fournit aucun raccourci comme le$.getJSON
faitCes extraits effectuent tous exactement la même chose:
Cependant, ils sont très différents de ceux-ci, qui effectuent tous la même chose:
Le deuxième ensemble de gestionnaires d'événements utilise la délégation d'événements et fonctionnera pour les éléments ajoutés dynamiquement. Les gestionnaires d'événements qui utilisent la délégation sont également beaucoup plus performants. Le premier ensemble ne fonctionnera pas pour les éléments ajoutés dynamiquement et sont bien pires pour les performances.
La
on()
fonction de jQuery n'introduit aucune nouvelle fonctionnalité qui n'existait pas déjà, c'est juste une tentative de standardiser la gestion des événements dans jQuery (vous n'avez plus à choisir entre vivre, lier ou déléguer).la source
$('selector').live('click', function () { ... });
que vous gardez le résultat aussi identique que possible.Les méthodes directes
.delegate
sont des API supérieures.on
et il n'est pas prévu de les déprécier.Les méthodes directes sont préférables car votre code sera moins typé en chaîne. Vous obtiendrez une erreur immédiate lorsque vous tapez mal un nom d'événement plutôt qu'un bug silencieux. À mon avis, il est également plus facile d'écrire et de lire
click
queon("click"
Le
.delegate
est supérieur à en.on
raison de l'ordre de l'argument:Vous savez tout de suite que c'est délégué parce que, eh bien, ça dit délégué. Vous voyez également instantanément le sélecteur.
Avec
.on
ce n'est pas immédiatement clair si c'est même délégué et vous devez regarder à la fin pour le sélecteur:Maintenant, la dénomination de
.bind
est vraiment terrible et est à première vue pire que.on
. Mais.delegate
ne peut pas faire d'événements non délégués et il y a des événements qui n'ont pas de méthode directe, donc dans un cas rare comme celui-ci, cela pourrait être utilisé mais uniquement parce que vous voulez faire une séparation nette entre les événements délégués et non délégués.la source
Si vous regardez dans le code source,
$.fn.bind
vous constaterez que ce n'est qu'une fonction de réécriture pouron
:http://james.padolsey.com/jquery/#v=1.7.2&fn=$.fn.bind
la source
De la documentation jQuery:
http://api.jquery.com/bind/
la source
Depuis Jquery 3.0 et supérieur, .bind est obsolète et préfère utiliser .on à la place. Comme @Blazemonger a répondu plus tôt, il peut être supprimé et c'est sûr qu'il le sera. Pour les anciennes versions, .bind appellerait également .on en interne et il n'y a aucune différence entre eux. Veuillez également consulter l'API pour plus de détails.
Documentation de l'API jQuery pour .bind ()
la source