Come posso verificare se una particolare funzione di jQuery UI è disponibile e utilizzare una funzione diversa, se non lo è?

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

Domanda

Sto scrivendo un plugin jQuery e vorrei che il mio codice per sfruttare le show(effect, [options], [speed], [callback]) e hide(effect, [options], [speed], [callback]) funzioni jQuery UI, che consentono di mostrare e nascondere elementi con una bella animazione.

Tuttavia, mi piacerebbe anche come il mio plugin per degradare con grazia se jQuery UI non è disponibile, il passaggio indietro per utilizzare le funzioni di base, prive di animazione show() e hide() presenti nelle API jQuery standard.

Ho bisogno di prova per lo spettacolo e per nascondere le funzioni specificamente, come anche se jQuery UI è a disposizione che potrebbe potenzialmente essere una versione personalizzata, senza i componenti effetti inclusi.

In un primo momento ho pensato che potrei essere in grado di fare qualcosa di simile:

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

Ma naturalmente questo non funziona, in quanto anche se interfaccia utente non è presente, show() è ancora una funzione, ha solo una diversa firma-so rendimenti typeof object in entrambi i casi.

Quindi, qual è il modo migliore per me per controllare se jQuery UI è disponibile per il mio plug-in? Ogni aiuto è molto apprezzato!

È stato utile?

Soluzione

È possibile verificare la presenza di un effetto come questo:

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

Quindi è possibile utilizzare che da nessuna parte:

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

È possibile visualizzare una demo qui , selezionare / deselezionare jQuery UI a sinistra e fare clic su "Esegui" sulla parte superiore per vederlo in azione. Questo funziona perché gli effetti sono dichiarate in questo modo:

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

Per esempio, si può vedere " cieco" qui . Il motivo per cui verificare la presenza di entrambi $.effects e $.effects.effect nel codice qui sopra è che si può scaricare solo alcuni del effetti quando si scarica jQuery UI , quindi questo account per questa possibilità.

Altri suggerimenti

funzione di Nick ha funzionato perfettamente; per la coerenza, ho finito di aggiungere come una funzione di utilità jQuery da dentro il mio codice del plugin:

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

Così ora posso chiamare $.hasEffect(effectname) dove voglio per verificare la presenza di un particolare effetto jQuery UI.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top