2015-04-16 2 views
2

У меня возникла проблема, когда у меня на моем сайте есть отзывчивый слайдер, который был добавлен во внешний файл .js. Я сталкиваюсь с проблемой, когда мода не появляется на главной странице, потому что страница ищет слайдер, который включен только на несколько дополнительных страниц.Как запустить функцию jQuery только тогда, когда это необходимо?

Chrome консоль показывает следующее сообщение об ошибке: Uncaught TypeError: undefined is not a function

Вот мой текущий код:

$('.my-carousel').slick({ 
    speed: 330, 
    slidesToShow: 4, 
}); 
+0

Вы бы необходимо загрузить javascript (например, карусель) на любую страницу, на которой вы хотите ее использовать. Если библиотека не загружена, свойство '.slick' в этом случае будет неопределенным, следовательно, ошибка, которую вы выполняете. – Carl

+0

Используйте * typeof * для этой цели: 'if (typeof YourVar_orElement! == 'undefined') {// do work}'. Проверьте [Документы MDN] (https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Operadores/typeof). * Оператор typeof возвращает строку, указывающую тип неориентированного операнда. * – kosmos

ответ

7

Вы можете проверить, был ли загружен плагин таким образом (он проверяет, является ли данная функция JQuery существует):

if ($().slick) { 
// .. your code 
} 

или

if ($.fn.slick) { 
// .. your code 
} 
+0

Не нужно ли передавать селектор в '$()'? –

+0

Обновлено ответом :) – covfefe

+1

Я бы предложил 'if ('slick' в $ .fn && typeof $ .fn.slick === 'function') ...' – adeneo

0

Вы можете использовать length, чтобы проверить, если он существует, например:

if ($('.my-element').length) { //do stuff }

+0

Это проверит только, существует ли элемент DOM, а не если присутствует/загружена функциональность скрипта. – andybeli

-1
if($('.my-carousel').length){ 
    $('.my-carousel').slick({ 
     speed: 330, 
     slidesToShow: 4, 
    }); 
} 
+0

Попробуйте добавить некоторое объяснение для своего ответа, вместо того, чтобы просто показывать правильный код. Таким образом, вопросник узнает, где они поступили не так. –

1

Вы можете просто проверить, если карусель существует перед вызовом функции, как так:

var myCarousel = $('.my-carousel'); 
if (typeof myCarousel.slick !== 'undefined') { 
    myCarousel.slick({speed: 330, slidesToShow: 4}); 
} 
+0

Каким будет преимущество использования переменной вместо CookieMan, если проверка? –

Смежные вопросы