IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

Création plugin avec plusieurs méthodes


Sujet :

jQuery

  1. #1
    Membre actif
    Avatar de fabou3377
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2006
    Messages : 182
    Points : 280
    Points
    280
    Par défaut Création plugin avec plusieurs méthodes
    Bonjour,

    j'aimerais avoir une plugin afin d'attacher plusieurs méthodes au sélecteurs.
    Mais ça ne marche pas l méthode zigzag n'est pas trouvée.. Pour jq c'est JqUi.. Merci d'avance pour votre aide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
     
    (function ($) {
     
        $.fn.lam2mobile = function (selector) {
            this.each(function () {
                var $this = $(this);
                this.zigzag = function () {
                    console.log('public zigzag called!');
                }
            });
            return this;
     
        };
     
     
    })(jq)

  2. #2
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Bonsoir

    On peut ajouter plusieurs méthodes au prototype de jQuery :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    ( function( $ ){
    	 $.extend( $.fn, {
    	 	"pluginUn" : function( options ){
    	           return this.each( function (i, item){
    	               console.log( i, item, "pluginUn" );
    	           });
    	 	},
    	 	"pluginDeux" : function( options ){
    	           return this.each( function (i, item){
    	               console.log( i, item, "pluginDeux" );
    	           });
    	 	},
    	 	"pluginTrois" : function( options ){
    	           return this.each( function (i, item){
    	               console.log( i, item, "pluginTrois" );
    	           });
    	 	}
         });
    })(jQuery);
     
    $( function(){
    	$( selector )
    		.pluginUn()
    		.pluginDeux()
    		.pluginTrois();
    });

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  3. #3
    Membre régulier Avatar de marcbuils
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2012
    Messages : 99
    Points : 124
    Points
    124
    Par défaut
    Bonjour fabou3377,

    Si je comprends bien ce que tu souhaites faire, ton plugin fonctionne en fait déjà très bien.

    Citation Envoyé par fabou3377 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
     
    (function ($) {
     
        $.fn.lam2mobile = function (selector) {
            this.each(function () {
                var $this = $(this);
                this.zigzag = function () {
                    console.log('public zigzag called!');
                }
            });
            return this;
     
        };
     
     
    })(jq)
    Si maintenant tu appels le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <div id="test">kikoo</div>
    <script>
    (function($){
      $('#test').lam2mobile();
      $('#test').get(0).zigzag();
    })(jq);
    </script>
    Le message "public zigzag called!" va bien s'afficher dans la console. Par contre, code suivant ne fonctionnera pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <script>
    (function($){
      $('#test').lam2mobile();
      $('#test').zigzag();  // Erreur car la fonction jQuery.fn.zigzag n'existe pas
    })(jq);
    </script>
    Car à la différence de librairies comme Prototype (ou en JavaScript natif), l'objet jQuery ne retourne pas directement le dom HTML concerné, mais un objet jQuery qui contient une liste de DOM.
    Donc dans ton plugin, le 'this' de la ligne 'this.zigzag = function () {' correspond bien au DOM, par contre $('#test') correspond à un objet jQuery.
    C'est pourquoi pour appeler ta fonction zigzag il faut d'abord récupérer le DOM via les fonctions $('#test').get(0) ou $('#test')[0] (c'est un équivalent).

    Mais en jQuery, il est très déconseillé d'ajouter des méthodes directement aux DOM (entre autres pour des raisons de mémoire/performance), c'est pourquoi il vaut mieux utiliser la méthode que présente danielhagnoul afin de créer un plugin par méthode que tu souhaites ajouter. Du coup elles seront accessibles en effet pour tous les DOMs, mais ce n'est pas dérangeant car tu les utilises normalement uniquement sur les DOMs qui t’intéressent.


    @++,

    Marc
    Pour moi, une informatique efficace est avant tout une informatique intuitive
    Liste de mes cours: http://marcbuils.developpez.com
    Si vous appréciez mon intervention, dite le avec le

Discussions similaires

  1. Plug-in avec plusieurs méthodes
    Par popy67 dans le forum jQuery
    Réponses: 1
    Dernier message: 31/08/2011, 11h38
  2. Réponses: 4
    Dernier message: 30/12/2010, 16h08
  3. [FPDF] Création documents avec plusieurs images
    Par EMiLY31 dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 01/08/2010, 19h58
  4. Plusieurs formulaires dans un fichier avec plusieurs méthodes post
    Par cyberdevelopment dans le forum Langage
    Réponses: 2
    Dernier message: 17/08/2006, 15h04
  5. Création JPopupMenu avec plusieurs niveaux
    Par gpcanto dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 01/06/2006, 08h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo