Come posso verificare se una particolare funzione di jQuery UI è disponibile e utilizzare una funzione diversa, se non lo è?
-
28-09-2019 - |
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!
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.