Как я могу проверить, доступна ли конкретная функция пользовательского интерфейса jQuery, и использовать другую функцию, если это не так?

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

Вопрос

Я пишу плагин jQuery, и я хотел бы, чтобы мой код использовал преимущества пользовательского интерфейса jQuery show(effect, [options], [speed], [callback]) и hide(effect, [options], [speed], [callback]) функции, которые позволяют показывать и скрывать элементы с приятной анимацией.

Тем не менее, я бы также хотел, чтобы мой плагин изящно деградировал, если пользовательский интерфейс jQuery недоступен, переключаясь обратно на использование базового, неанимирующего show() и hide() функции, присутствующие в стандартном jQuery API.

Мне нужно будет специально протестировать функции show и hide, даже если пользовательский интерфейс jQuery является доступно потенциально это может быть пользовательская версия, без включенных компонентов эффектов.

Сначала я подумал, что, возможно, смогу сделать что-то вроде:

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

Но, конечно, это не работает, так как даже при отсутствии пользовательского интерфейса, show() это все еще функция, просто у нее другая сигнатура —так что typeof ВОЗВРАТ object в любом случае.

Итак, каков наилучший способ для меня проверить, доступен ли пользовательский интерфейс jQuery для моего плагина?Любая помощь очень ценится!

Это было полезно?

Решение

Вы можете проверить наличие подобного эффекта следующим образом:

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

Тогда вы можете использовать это где угодно:

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

Вы можете посмотреть демо-версию здесь, установите / снимите флажок jQuery UI слева и нажмите "Выполнить" вверху, чтобы увидеть его в действии.Это работает, потому что эффекты объявляются следующим образом:

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

Например, вы можете увидеть "слепой" здесь.Причина, по которой я проверяю наличие обоих $.effects и $.effects.effect в приведенном выше коде есть то, что вы можете только скачать некоторые из эффектов, которые возникают при загрузке пользовательского интерфейса jQuery, так что это объясняет такую возможность.

Другие советы

Функция Ника отлично работала; Для консистенции я закончил добавить его как функцию утилиты jQuery из моего кода плагина:

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

Так что теперь я могу позвонить $.hasEffect(effectname) В любом месте я хочу проверить наличие определенного эффекта jQuery UI.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top