50 votes

jQuery : live() vs delegate()

J'utilise jQuery dans mon application web. En lisant sa documentation, j'ai lu que live() y delegate() . Bien qu'ils aient expliqué les deux méthodes, je ne comprends pas la différence exacte entre elles. Je ne sais pas non plus quelle méthode est idéale dans quel scénario.

Veuillez m'aider à bien comprendre ces méthodes.

Merci

57voto

Nick Craver Points 313913

.live() exige que vous exécutiez le sélecteur immédiatement, à moins que vous n'utilisiez le résultat, c'est du gaspillage. Le gestionnaire d'événement ici est attaché à document Il faut donc vérifier tous les événements de ce type provenant de tout élément qui bouillonne. Voici un exemple d'utilisation :

$(".myClass").live("click", function() { alert("Hi"); });

Notez que la déclaration $(".myClass") exécuté ce sélecteur pour trouver tous les éléments avec cette classe même si nous ne nous soucions pas d'eux nous avons tous recherché était la chaîne ".myClass" pour correspondre plus tard quand click les événements s'accumulent jusqu'à document .


.delegate() utilise effectivement .live() en interne, mais avec un contexte. Le sélecteur est no s'exécutent immédiatement, donc c'est déjà plus efficace, et il ne s'attache pas à document (bien qu'il le puisse), c'est beaucoup plus local... et tous ces autre Les événements provenant d'autres arbres d'éléments dont vous ne vous souciez pas ne sont même pas vérifiés lors de la création de bulles... encore une fois plus efficace. Voici un exemple d'utilisation :

$("#myTable").delegate("td", "click", function() { alert("Hi"); });

Que s'est-il passé ici ? Nous avons couru $("#myTable") pour obtenir l'élément auquel se rattacher (certes plus coûteux que les document mais nous sommes en utilisant le résultat. Ensuite, nous attachons un gestionnaire d'événements à cet élément (ou à ces éléments dans d'autres cas). Seulement clicks de sur de cet élément sont vérifiés par rapport à la "td" lorsqu'ils se produisent, et non à partir de partout comme .live() (puisque tout est à l'intérieur document ).

6voto

Andy E Points 132925

delegate() les cartes de live() dans le code de jQuery. La principale différence est que live() est appelé sur un élément pour lequel vous souhaitez déléguer les événements à un autre élément. live() déléguera ces événements à la document objet.

delegate() D'autre part, l'option de délégation d'événements vous permet de définir l'élément auquel les événements sont délégués en passant un sélecteur. Les événements qui remontent à cet élément sont traités si l'élément d'origine correspond au sélecteur.

Comme @NickCraver mentionné , delegate() est plus performant qu'en direct parce qu'il ne capture pas nécessairement les événements de chaque élément de la page et qu'il n'interroge pas le sélecteur immédiatement.

3voto

juque Points 93

Extrait de la documentation de jQuery :

Depuis la version 1.7 de jQuery, la méthode .live() est obsolète. Utilisez .on() pour attacher des gestionnaires d'événements. Les utilisateurs d'anciennes versions de jQuery doivent utiliser la méthode .delegate() de préférence à .live().

http://api.jquery.com/live/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X