Y a-t-il une différence entre le code suivant?
$('#whatever').on('click', function() {
/* your code here */
});
et
$('#whatever').click(function() {
/* your code here */
});
Je pense que la différence réside dans les modèles d'utilisation.
Je préférerais .on
plus .click
parce que le premier peut utiliser moins de mémoire et travailler pour des éléments ajoutés dynamiquement.
Considérez le code HTML suivant:
<html>
<button id="add">Add new</button>
<div id="container">
<button class="alert">alert!</button>
</div>
</html>
où nous ajoutons de nouveaux boutons via
$("button#add").click(function() {
var html = "<button class='alert'>Alert!</button>";
$("button.alert:last").parent().append(html);
});
et veulent "Alerte!" pour afficher une alerte. Nous pouvons utiliser "cliquer" ou "sur" pour cela.
click
$("button.alert").click(function() {
alert(1);
});
avec ce qui précède, un gestionnaire distinct est créé pour chaque élément unique qui correspond au sélecteur. Cela signifie
.on
$("div#container").on('click', 'button.alert', function() {
alert(1);
});
avec ce qui précède, un gestionnaire unique pour tous les éléments qui correspondent à votre sélecteur, y compris ceux créés dynamiquement.
.on
Comme l'a commenté Adrien ci-dessous, une autre raison d'utiliser .on
est les événements à espace de noms.
Si vous ajoutez un gestionnaire avec .on("click", handler)
vous, supprimez-le normalement avec .off("click", handler)
ce qui supprimera ce gestionnaire même. Évidemment, cela ne fonctionne que si vous avez une référence à la fonction, et si vous n'en avez pas? Vous utilisez des espaces de noms:
$("#element").on("click.someNamespace", function() { console.log("anonymous!"); });
avec reliure via
$("#element").off("click.someNamespace");
on('click' ...)
, voir stackoverflow.com/a/3973060/759452 ie.on('click.darkenallothersections' ...)
et en même tempson('click.displaynextstep' ...)
, alors je ne peux délier que celui que je choisis en utilisant.unbind('click.displaynextstep')
on()
est la tendance de jQuery. Je devais mise à jour$(window).load(function() {});
à$(window).on("load", function (e) {})
quand je suis passé à jQuery 3.Non, il n'y a aucune différence fonctionnelle entre les deux exemples de code dans votre question.
.click(fn)
est une "méthode de raccourci" pour.on("click", fn)
. De la documentation de.on()
:Notez que cela
.on()
diffère du.click()
fait qu'il a la possibilité de créer des gestionnaires d'événements délégués en passant unselector
paramètre, alors.click()
qu'il ne le fait pas. Quand.on()
est appelé sansselector
paramètre, il se comporte exactement de la même manière que.click()
. Si vous souhaitez une délégation d'événement, utilisez.on()
.la source
selector
paramètre. Si vous appelez.on()
sansselector
paramètre, il n'y a aucune amélioration des performances par rapport à l'utilisation.click()
..on()
est la méthode recommandée pour effectuer toutes vos liaisons d'événements à partir de jQuery 1.7. Il regroupe toutes les fonctionnalités des deux.bind()
et.live()
en une seule fonction qui modifie le comportement lorsque vous lui passez différents paramètres.Comme vous avez écrit votre exemple, il n'y a aucune différence entre les deux. Les deux lient un gestionnaire à l'
click
événement de#whatever
.on()
offre une flexibilité supplémentaire en vous permettant de déléguer des événements déclenchés par des enfants#whatever
à une seule fonction de gestionnaire, si vous le souhaitez.la source
.live()
fait? En outre, cela semble contredire les autres réponses qui disent qu'il n'a que la fonctionnalité de.click()
, et ne s'applique donc pas aux événements futurs..on()
peut faire ce qui.click()
fait et faire quoi.bind()
et.live()
faire - cela dépend des paramètres avec lesquels vous l'appelez. (Certaines autres réponses le mentionnent également.) Notez cependant que "Lier à tous les liens à l'intérieur de # quoi que ce soit" n'est pas ce qui.live()
fait, c'est ce qui.delegate()
fait..live()
se lie à tout l'intérieurdocument
plutôt que de vous laisser spécifier le conteneur. Remarque.live()
est également déconseillée à partir de jQuery 1.7.Comme mentionné par les autres réponses:
Notez cependant que cela
.on()
prend en charge plusieurs autres combinaisons de paramètres qui.click()
ne le font pas, ce qui lui permet de gérer la délégation d'événements (remplaçant.delegate()
et.live()
).(Et évidemment, il existe d'autres méthodes de raccourci similaires pour "keyup", "focus", etc.)
La raison pour laquelle je poste une réponse supplémentaire est de mentionner ce qui se passe si vous appelez
.click()
sans paramètres:Notez que si vous utilisez
.trigger()
directement, vous pouvez également passer des paramètres supplémentaires ou un objet événement jQuery, ce que vous ne pouvez pas faire.click()
.Je voulais également mentionner que si vous regardez le code source jQuery (dans jquery-1.7.1.js), vous verrez qu'en interne la fonction
.click()
(ou.keyup()
, etc.) appellera réellement.on()
ou.trigger()
. Évidemment, cela signifie que vous pouvez être assuré qu'ils ont vraiment le même résultat, mais cela signifie également que l'utilisation.click()
a un tout petit peu plus de frais généraux - pas de quoi s'inquiéter ou même penser dans la plupart des circonstances, mais théoriquement, cela pourrait avoir de l'importance dans des circonstances extraordinaires.EDIT: Enfin, notez que cela
.on()
vous permet de lier plusieurs événements à la même fonction sur une seule ligne, par exemple:la source
.click()
.)Non, il n'y en a pas.
Le point essentiel
on()
est ses autres surcharges et la possibilité de gérer des événements qui n'ont pas de méthodes de raccourci.la source
Ils semblent être les mêmes ... Documentation de la fonction click () :
Documentation de la fonction on () :
la source
.click
vs.on
.click
les événements ne fonctionnent que lorsque l'élément est rendu et ne sont attachés aux éléments chargés que lorsque le DOM est prêt..on
les événements sont attachés dynamiquement aux éléments DOM, ce qui est utile lorsque vous souhaitez attacher un événement aux éléments DOM rendus sur demande ajax ou autre chose (une fois que le DOM est prêt).la source
Ici, vous obtiendrez une liste des différentes manières d'appliquer l'événement click. Vous pouvez sélectionner en conséquence comme satisfaisant ou si votre clic ne fonctionne pas, essayez simplement une alternative parmi celles-ci.
la source
Ils ont maintenant déconseillé click (), donc il vaut mieux continuer ('click')
la source
Pour autant qu'il ne soit pas connu d'Internet et de certains amis .on () est utilisé lorsque vous ajoutez dynamiquement des éléments. Mais quand je l'ai utilisé dans une simple page de connexion où l'événement click devrait envoyer AJAX à node.js et au retour ajouter de nouveaux éléments, il a commencé à appeler des appels multi-AJAX. Quand je l'ai changé pour cliquer () tout s'est bien passé. En fait, je n'ai pas fait face à ce problème avant.
la source
NOUVEAUX ÉLÉMENTS
En complément des réponses complètes ci-dessus pour mettre en évidence les points critiques si vous souhaitez que le clic soit attaché à de nouveaux éléments:
la source
$(document).on('click','.UPDATE',function(){ });
fonctionne efficacement comme les mêmes données récupérées en utilisant jquery. bouton ne fonctionne pas au moment de la mise à jour ou de la suppression:la source