2010-07-25 6 views
3

Je crée un plugin et il ne peut pas accéder à $ (this). Un simple aperçu de mon plugin est

(function($){ 
    $.fn.myPlugin= function(options, callback) { 
     return this.each(function(){ 
       $(this).click(function(){ 
         // some plugin works .. 

         callback(); 
       }); 
     }); 
    }; 

})(jQuery); 

Alors je joins mon plug-in à un élément comme

$('p').myPlugin({ 
     // Some options 
}, function(){ 
     alert('first test'); 
     alert($(this).text()); 
}); 

ici lorsque l'élément p est cliqué, je reçois la première alerte, mais je n'ai pas la 2ème alerte.

La fonction de rappel est appelée mais ne peut pas accéder à this. Y a-t-il un problème avec la définition ou avec le code? toute autre suggestion sera également utile

Répondre

4

lieu de callback();, utilisez .apply() pour lui donner le bon contexte (sinon il est window), comme ceci:

callback.apply(this); 

You can see the updated/working version here.


Pour un aperçu plus complet ici, vous pouvez passer plus d'arguments si vous voulez que callback, par exemple, si vous vouliez faire le options disponible, vous pouvez le faire:

(function($){ 
    $.fn.myPlugin= function(options, callback) { 
    return this.each(function(){ 
     $(this).click(function(){ 
     callback.apply(this, [options]); 
    }); 
    }); 
}; 
})(jQuery); 

Ensuite, appeler comme ceci:

$('p').myPlugin({ 
    thing: "thing1" 
}, function(opts){ 
    alert(opts.thing); //thing1 
});​ 

You can give that one a try here, ajoutez simplement tous les arguments que vous voulez à ce tableau, callback() sera être appelé avec ces arguments :)

0

Pouvez-vous s'il vous plaît poster un exemple complet qui utilise le widget de saisie semi-automatique?

Voici ce que je voulais faire ...

$('.suggest').autocomplete({ 
    source: function(request, response) { 
     typ = $(this).getAttr("class").split(" ")[2] 
     .... 

... mais ce renvoie undefined. Pour l'instant j'utilise document.activeElement, mais je préférerais la méthode de Nick Craver.

Questions connexes