Wie kann ich überprüfen, ob eine bestimmte jQuery UI-Funktion zur Verfügung steht und eine andere Funktion verwenden, wenn dies nicht der Fall?

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

Frage

Ich schreibe ein jQuery-Plugin, und ich möchte meinen Code wie die Vorteile der jQuery UI show(effect, [options], [speed], [callback]) und hide(effect, [options], [speed], [callback]) Funktionen zu übernehmen, mit denen Sie zeigen und verstecken Elemente mit einer netten Animation.

Allerdings würde ich auch wie mein Plugin anmutig verschlechtern, wenn jQuery UI nicht verfügbar ist, den Wechsel der Grund, verwenden zurück nicht belebend show() und hide() Funktionen in der Standard-jQuery API.

Ich werde speziell für die Show und auszublenden Funktionen testen müssen, als auch wenn jQuery UI is verfügbar es möglicherweise eine benutzerdefinierte Version sein könnte, ohne die Effekte Komponenten enthalten.

Zuerst dachte ich, dass ich im Stande sein könnte wie etwas zu tun:

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

Aber natürlich funktioniert das nicht, denn selbst wenn UI nicht vorhanden ist, ist show() noch eine Funktion, es hat nur eine andere signatur so typeof kehrt in jedem Fall object.

Also, was ist der beste Weg für mich, um zu überprüfen, ob jQuery UI zu meinem Plugin verfügbar ist? Jede Hilfe ist sehr geschätzt!

War es hilfreich?

Lösung

Sie können für einen Effekt wie folgt überprüfen:

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

Dann können Sie diese überall verwenden:

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

Sie können eine Demo sehen hier , aktivieren / deaktivieren jQuery UI auf der linken Seite und klicken Sie auf „Ausführen“ bis oben in Aktion zu sehen. Dies funktioniert, weil Effekte werden wie folgt erklärt:

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

Zum Beispiel können Sie sehen, “ blind“hier . Der Grund, warum ich für beide $.effects und $.effects.effect im Code überprüfen oben ist nur einige von der Effekte, wenn Sie jQuery UI herunterladen, so dass diese Konten für diese Möglichkeit.

Andere Tipps

Nicks Funktion funktionierte perfekt; Konsistenz, endete ich es als jQuery Nutzenfunktion aus meinem Plugin-Code oben hinzufügen:

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

So, jetzt kann ich $.hasEffect(effectname) überall anrufen möchte ich auf das Vorhandensein eines bestimmten jQuery UI-Effekt überprüfen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top