Как проверить наличие плагина и функций jQuery?

У меня есть плагин на некоторых страницах, но на некоторых других страницах он мне не нужен, поэтому я не ссылался на его файл сценария.

Как проверить, существуют ли функции плагина перед его использованием.

В моем случае я использую этот плагин: и я использую его так:

$('#marquee-inner div').marquee('pointer').mouseover(function() {
    $(this).trigger('stop');
}).mouseout(function() {
    $(this).trigger('start');
}).mousemove(function(event) {
    if ($(this).data('drag') == true) {
        this.scrollLeft = $(this).data('scrollX') + ($(this).data('x') - event.clientX);
    }
}).mousedown(function(event) {
    $(this).data('drag', true).data('x', event.clientX).data('scrollX', this.scrollLeft);
}).mouseup(function() {
    $(this).data('drag', false);
});

Я хочу сделать проверку перед вызовом этой функции выделения, если она существует или нет.


person Amr Elgarhy    schedule 17.03.2011    source источник
comment
возможный дубликат Как я могу проверить, является ли плагин jQuery загружен?   -  person toxalot    schedule 23.11.2013


Ответы (3)


Вы также можете сделать это. Позвольте мне взять пример бегущей строки jQuery.

Это хорошо, если вы используете только jQuery.

if($().marquee) {
    // marquee is loaded and available
}

OR

if($.fn.marquee !== undefined) {
    // marquee is loaded and available
}

Аналогично предыдущему, но безопасно, когда вы используете другие JS-фреймворки Mootools и т. д.

if(jQuery().marquee) {
    // marquee is loaded and available
}

OR

if(jQuery.fn.marquee !== undefined) {
    // marquee is loaded and available
}
person Madan Sapkota    schedule 18.04.2013
comment
Было бы лучше использовать !== undefined, поскольку !== и === сравниваются непосредственно со строковым типом объекта. так что в основном то, что вы сравниваете, - это строковый тип, я знаю, что это работа, но, может быть, было бы правильнее использовать кавычки... - person ncubica; 19.06.2013

Немного лучше:

if ($.isFunction($.fn.marquee)) {
    // ...
}

Может быть, немного излишне, но это гарантирует, что это по крайней мере функция.

Обновление, январь 2021 г.:

Поскольку jQuery.isFunction() устарело с версии 3.3, самый простой и рекомендуемый способ проверить это сейчас:

if (typeof $.fn.marquee === "function") {
    // ...
}

Обратите внимание, что этого может быть недостаточно для некоторых очень старых браузеров — см. $.isFunction() реализация для получения подробной информации.

person Noyo    schedule 03.09.2013

person    schedule
comment
Чистое решение JS для этого? Без знака $?? - person quarky; 04.08.2017