web-dev-qa-db-fra.com

$ (document) .ready sténographie

Le raccourci suivant est-il pour $(document).ready?

(function($){

//some code

})(jQuery);

Je vois beaucoup ce schéma, mais je ne trouve aucune référence à celui-ci. Si c'est un raccourci pour $(document).ready(), y a-t-il une raison particulière pour laquelle cela pourrait ne pas fonctionner? Dans mes tests, il semble toujours se déclencher avant l'événement ready.

231
Mark Brown

Le raccourci pour $(document).ready(handler) est $(handler) (où handler est une fonction). Voir ici .

Le code de votre question n'a rien à voir avec .ready(). Il s'agit plutôt d'une expression de fonction immédiatement appelée (IIFE) avec l'objet jQuery comme argument. Son but est de restreindre au moins la portée de la variable $ à son propre bloc afin d'éviter les conflits. Vous voyez généralement le motif utilisé par les plugins jQuery pour vous assurer que $ == jQuery.

243
BoltClock

La sténographie est:

$(function() {
    // Code here
});
521
Kyle Trauberman

La sténographie correcte est la suivante:

$(function() {
    // this behaves as if within document.ready
});

Le code que vous avez posté…

(function($){

//some code

})(jQuery);

… Crée une fonction anonyme et l'exécute immédiatement en transmettant jQuery en tant que arg $. Tout ce que cela fait est de prendre le code dans la fonction et de l'exécuter normalement, puisque $ est déjà un alias pour jQuery. :RÉ

85
Gordon Gustafson

Ce n'est pas un raccourci pour $(document).ready().

Le code que vous avez posté encadre le code interne et rend jQuery disponible en tant que $ sans polluer l'espace de nom global. Cela peut être utilisé lorsque vous souhaitez utiliser le prototype et jQuery sur une page.

Documenté ici: http://learn.jquery.com/using-jquery-core/avoid-conflicts-other-libraries/#use-an-immediately-invoked-function-expression

16
samy-delux

Ces lignes spécifiques sont le wrapper habituel pour les plugins jQuery:

"... pour vous assurer que votre plug-in n'entre pas en collision avec d'autres bibliothèques pouvant utiliser le signe dollar, il est recommandé de passer jQuery à une fonction auto-exécutante (fermeture) qui le mappe sur le signe dollar afin qu'il puisse" t être écrasé par une autre bibliothèque dans le cadre de son exécution. "

(function( $ ){
  $.fn.myPlugin = function() {
    // Do your awesome plugin stuff here
  };
})( jQuery );

De http://docs.jquery.com/Plugins/Authoring

12
morgar

Le raccourci multi-framework pour ready est:

jQuery(function($, undefined) {
    // $ is guaranteed to be short for jQuery in this scope
    // undefined is provided because it could have been overwritten elsewhere
});

En effet, jQuery n'est pas le seul framework qui utilise les variables $ et undefined.

10
Timo Huovinen

Même variante plus courte est d'utiliser

$(()=>{

});

$ signifie jQuery et ()=>{} est ainsi appelé 'fonction de flèche' qui hérite de this de la fermeture. (Ainsi, dans this, vous aurez probablement window à la place de document.)

1
Edvard Rejthar