¿Cómo puedo comprobar si una determinada función jQuery UI está disponible y utilizar una función diferente si no lo es?

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

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!

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top