47 votes

.délégué() vs .sur()

Je suis à l'aide de jQuery dans mon application web. J'ai été en utilisant .bind() mais je vois que c'est un peu lent, de sorte que lors de la lecture de la documentation que j'ai lu sur .on() et .delegate(). Je comprends comment .delegate() fonctionne, mais je ne suis pas clair sur ce qu'est la différence entre elle et .on() ou qui est mieux dans des scénarios.

Je suis aussi à l'aide de jQuery 1.6 donc je voudrais savoir si cela vaut la peine de préparer mon script jQuery 1.7 en les mettant dans un état semblable à la suivante:

if(typeof $(selector).on == 'function'){
    /* use .on() */
}else{
    /* use .delegate() */
}

Est-ce une bonne idée (pour préparer l' .on()) ou est-il simplement à la recherche d'ennuis pour rien?

Merci de m'aider à obtenir une compréhension claire de ces méthodes.

52voto

lalibi Points 1754

L' .on() syntaxe est la nouvelle syntaxe de la version 1.7 utilise et il est destiné à remplacer .bind(), .delegate() et .live().

Plus de détails ici -> http://blog.jquery.com/2011/11/03/jquery-1-7-released/

De Nouvelles Api D'Événements: .sur() et .off()

Le nouveau .sur() et .off() Api à l'unification de toutes les manières de joindre les événements pour un document en jQuery - et ils sont plus court à taper!

  $(elements).on( events [, selector] [, data] , handler );
  $(elements).off( [ events ] [, selector] [, handler] );

Quand un sélecteur est fourni .sur() est similaire .délégué() le il s'attache un délégué du gestionnaire d'événement, filtrée par le sélecteur. Lorsque le sélecteur est omis ou nulle à l'appel, c'est comme .bind(). Il y en a un ambigu: en effet, Si les données argument est une chaîne, vous devez fournir un sélecteur de chaîne ou nulle, de sorte que les données n'est pas confondu avec un sélecteur. Passer un objet pour les données et vous n'aurez jamais à vous soucier de des cas particuliers.

Tous les événements existants méthodes de reliure (et de leurs correspondants déliaison méthodes) sont toujours là en 1.7, mais nous recommandons que vous utiliser .sur() pour toute nouvelle jQuery projet où vous savez la version 1.7 ou supérieur est en cours d'utilisation.

11voto

zzzzBov Points 62084

J'ai récemment répondu à une question connexe, sur ce sujet très.

L'important, c'est:

Le nouveau ondocs fonction est utilisée pour remplacer l'existant méthodes distinctes de la liaison des événements:

Les événements existants de continuer à exister, et sont tout simplement des alias de sur. Il n'existe pas de rapport officiel de penser qu'on va être supprimé, donc, si vous voulez être sûr de continuer à les utiliser si vous les comprenez mieux.

Délégué:

$(selector).delegate(subselector, events, data, handler);
$(selector).on(events, subselector, data, handler);

Source:

delegate: function( selector, types, data, fn ) {
  return this.on( types, selector, data, fn );
}

tl;dr

Si vous voulez rétro-compatibilité, il suffit de garder à l'aide de .delegate()docs, si votre code s'appuie sur les nouvelles fonctionnalités de jQuery, n'hésitez pas à utiliser on.

1voto

Pål Thingbø Points 101

Pensez à utiliser find() à la place de délégués des événements. Regardez ce test de performance: http://jsperf.com/jquery-event-delegation/85

Au lieu de

$("#mydomid").on("click", ".somechildclass", delegate);

utilisation

$("#mydomid").find(".somechildclass").on("click", delegate);

1voto

Viruzzo Points 2472

À partir de l'API:

"De jQuery 1.7, .délégué() a été remplacée par le .sur (), méthode".

"De jQuery 1.7, l' .sur() méthode qui offre toutes les fonctionnalités nécessaires pour fixer les gestionnaires d'événements."

0voto

Dasun Points 10555

si vous allez par le biais de l'Api jQuery, vous trouverez que les deux la même chose. Lire Plus

Par exemple, les éléments suivants .délégué() code:

$("table").délégué("td", "click", function() {
$(this).toggleClass("choisi"); });

est équivalent au code suivant écrit à l'aide .sur():

$("table").on("click", "td", function() {
$(this).toggleClass("choisi"); });

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