¿Cómo puedo comprobar si una determinada función jQuery UI está disponible y utilizar una función diferente si no lo es?
-
28-09-2019 - |
Pregunta
Estoy escribiendo un plugin de jQuery y me gustaría que mi código para aprovechar las show(effect, [options], [speed], [callback])
y hide(effect, [options], [speed], [callback])
funciones jQuery UI, que permiten mostrar y ocultar elementos con una animación agradable.
Sin embargo, también me gustaría que mi plugin para degradar gracia si jQuery UI no está disponible, cambiar de nuevo a utilizar las funciones básicas, sin animación show()
y hide()
presentes en la API de jQuery estándar.
necesitaré a prueba para las funciones Mostrar y ocultar específicamente, ya que incluso si jQuery UI es disponibles que potencialmente podría ser una versión personalizada, sin los componentes de efectos incluidos.
Al principio pensé que yo podría ser capaz de hacer algo como:
if(typeof myelement.show('blind', 'slow') == 'undefined')
{
myelement.show('blind', 'slow');
}
else
{
myelement.show();
}
Pero por supuesto esto no funciona, ya que incluso si la interfaz de usuario no está presente, show()
sigue siendo una función, que sólo tiene un diferentes firmas por lo que vuelve typeof
object
en ambos casos.
Así que, ¿cuál es la mejor manera para mí para comprobar si jQuery UI está disponible para mi plugin? Cualquier ayuda es muy apreciada!
Solución
Se puede comprobar si hay un efecto como este:
function hasEffect(effect) {
return $.effects && $.effects[effect];
}
A continuación, se puede utilizar en cualquier lugar que:
if(hasEffect('blind')) {
myelement.show('blind', 'slow');
} else {
myElement.show();
}
//or, you can shorten it further:
//$.fn.show.apply(myelement, hasEffect('blind') ? ['blind','slow'] : []);
Puede ver una demostración aquí , marcar / desmarcar jQuery UI de la izquierda y haga clic en "Ejecutar" encima de la tapa a verlo en acción. Esto funciona porque los efectos son declarados como esto:
$.effects.blind = function(o) { ...effecty stuff... };
Por ejemplo, se puede ver " ciega" aquí . La razón por la que la comprobación tanto para $.effects
y $.effects.effect
en el código anterior es que sólo se puede descargar algunos de la al descargar efectos jQuery UI , por lo que esto representa esa posibilidad.
Otros consejos
Función de Nick funcionó a la perfección; para mantener la coherencia, terminé agregándolo como una función de utilidad jQuery desde dentro de mi código de plugin:
$.extend({
hasEffect: function (effect) {
return $.effects && $.effects[effect];
}
});
Así que ahora puedo llamar a cualquier lugar $.hasEffect(effectname)
Quiero comprobar la presencia de un efecto particular jQuery UI.