Comment puis-je vérifier si une fonction jQuery UI particulière est disponible et utilise une autre fonction si elle est pas?

StackOverflow https://stackoverflow.com/questions/3060886

Question

J'écris un jQuery plug-in et je voudrais que mon code pour tirer parti des fonctions de show(effect, [options], [speed], [callback]) et hide(effect, [options], [speed], [callback]) jQuery UI, ce qui vous permet d'afficher et éléments masquer avec une belle animation.

Cependant, je voudrais aussi que mon plugin si gracieusement l'interface utilisateur se dégrade jQuery est pas disponible, la commutation de retour à utiliser les fonctionnalités de base, non-animant les fonctions de show() et hide() présentes dans l'API standard de jQuery.

Je vais besoin de test pour les afficher et masquer des fonctions spécifiquement, car même si l'interface utilisateur jQuery disponibles, il pourrait être une version personnalisée, sans les composants Effets inclus.

Au début, je pensais que je pourrais être capable de faire quelque chose comme:

if(typeof myelement.show('blind', 'slow') == 'undefined')
{
    myelement.show('blind', 'slow');
}
else
{
    myelement.show();
}

Mais bien sûr, cela ne fonctionne pas, car même si l'interface utilisateur n'est pas présent, show() est encore une fonction, il a juste une signature différente, donc retourne typeof object dans les deux cas.

Alors, quelle est la meilleure façon pour moi de vérifier si jQuery UI est disponible pour mon plugin? Toute aide est très appréciée!

Était-ce utile?

La solution

Vous pouvez vérifier un effet comme ceci:

function hasEffect(effect) {
    return $.effects && $.effects[effect];
}

Ensuite, vous pouvez l'utiliser partout:

if(hasEffect('blind')) {
  myelement.show('blind', 'slow');
} else {
  myElement.show();
}
//or, you can shorten it further:
//$.fn.show.apply(myelement, hasEffect('blind') ? ['blind','slow'] : []);​

Vous pouvez voir une démo ici , cocher / décocher jQuery UI sur la gauche et cliquez sur « Exécuter » en haut pour le voir en action. Cela fonctionne parce que les effets sont déclarés comme ceci:

$.effects.blind = function(o) { ...effecty stuff... };

Par exemple, vous pouvez voir » aveugle » . La raison pour laquelle je vérifie pour les deux $.effects et $.effects.effect dans le code ci-dessus est que vous ne pouvez télécharger certains de la effets lorsque vous téléchargez jQuery UI, donc cela représente cette possibilité.

Autres conseils

La fonction de Nick a parfaitement fonctionné; par souci de cohérence, je fini par l'ajouter en fonction utilitaire jQuery à partir de mon code plugin:

$.extend({
    hasEffect: function (effect) {
        return $.effects && $.effects[effect];
    }
});

Alors maintenant, je peux appeler $.hasEffect(effectname) partout où je veux vérifier la présence d'un effet jQuery UI particulier.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top