254 votes

$(document).ready raccourci

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

(function($){

//some code

})(jQuery);

Je vois ce modèle très souvent utilisé, mais je ne parviens pas à en trouver la référence. 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.

0 votes

Toute variable définie à l'intérieur de la fonction de motif mentionnée (par ex. var somevar; ) ne modifiera pas le contenu des variables du même nom en dehors de la fonction

3 votes

Le code a pour effet de garantir que $ représente jQuery dans ce bloc de fonctions, de sorte que le code est portable dans les endroits où l'alias $ pour jQuery est désactivé ou défini comme autre chose.

565voto

Kyle Trauberman Points 16049

Le raccourci est le suivant :

$(function() {
    // Code here
});

27 votes

Le premier argument est $ . Il serait bon de l'ajouter. C'est utile pour jQuery(function($, undefined) {});

5 votes

@raynos Ce n'est pas nécessaire. Le code ci-dessus fonctionne très bien comme alias de $(document).ready(function(){ });

10 votes

C'est juste utile de savoir que vous obtenez $ gratuitement comme premier argument.

259voto

BoltClock Points 249668

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

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

14 votes

Techniquement c'est un expression de fonction immédiatement invoquée . S'il s'appelait lui-même, il s'appellerait de l'intérieur. Cherchez sur le web iife ou passez directement à Le célèbre billet du blog de Cowboy Alman . Les détails sheesh.

92voto

Gordon Gustafson Points 14778

Le raccourci correct est le suivant :

$(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 avec jQuery en tant qu'argument $ . Tout ce qu'il fait effectivement, c'est prendre le code à l'intérieur de la fonction et l'exécuter normalement, car $ est déjà un alias pour jQuery . :D

4 votes

On pourrait dire qu'il garantit également que $ est l'alias de jQuery, si d'autres outils qui utilisent également $ comme alias sont chargés.

16voto

samy-delux Points 1742

Il ne s'agit pas d'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 à la fois 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

0 votes

Merci de répondre à la question

11voto

morgar Points 1706

Ces lignes spécifiques sont l'enveloppe habituelle des plugins jQuery :

"...pour être sûr que votre plugin n'entre pas en collision avec d'autres bibliothèques qui pourraient utiliser le signe du dollar, c'est une meilleure pratique de passer jQuery à une fonction auto-exécutrice (closure) qui le fait correspondre au signe du dollar afin qu'il ne puisse pas être écrasé par une autre bibliothèque dans la portée de son exécution."

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

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

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