Slick Carousel Uncaught TypeError: $(...). Slick не является функцией

Почему-то я не могу правильно использовать гладкую карусель ( http://kenwheeler.github.io/slick/).

Я получаю следующую ошибку:

Uncaught TypeError: $(...).slick is not a function

Я запускаю следующий код в моем файле JavaScript:

function initSlider(){
    $('.references').slick({
        dots: false,
        infinite: true,
        speed: 300,
        slidesToShow: 1,
        autoplay: true,
        prevArrow: '<div class="slick-prev"><i class="fa fa-chevron-left"></i></div>',
        nextArrow: '<div class="slick-next"><i class="fa fa-chevron-right"></i></div>'
    });
}

Я включил последнюю версию jQuery (2.1.4) с бауэром. Я также попытался включить jQuery CDN в заголовок моего файла шаблона макета, но это тоже ничего не решило.

Единственная странная вещь, которая может что-то значить, это то, что когда я не использую функцию для вызова слайдера, она работает, но выдает ошибку:

Uncaught TypeError: Cannot read property 'add' of null

Я обнаружил, что это означает, что код был загружен до загрузки DOM, что является правильным (я думаю).

Заранее спасибо!

Изменить: я создал JSFiddle из моего кода: https://jsfiddle.net/brz30e77/

РЕДАКТИРОВАТЬ 2: Ошибка сохранялась время от времени при добавлении новой функции в мой файл JS. В конце концов я удалил свой сцепленный файл JS и обнаружил, что загружаются две версии jQuery, одна из которых была очень, очень старой.

21 ответ

Решение

Я сам нашел решение позже, поэтому я поместил его как ответ:

Ошибка сохранялась время от времени при добавлении новой функции в мой файл JS. В конце концов я разобрал свой сцепленный JS-файл и обнаружил, что загружаются две версии jQuery, одна из которых была очень, очень старой.

Недавно была та же проблема: TypeError: $(...). Slick не является функцией

Нашел интересное решение. Надеюсь, это кому-нибудь пригодится.

В моей конкретной ситуации есть: JQuery + WHMCS + Slick. Работает нормально автономно, без WHMCS. Но после интеграции в WHMCS появляется ошибка.

Решением было использование jQuery в режиме noConflict.

Пример: Ваш код:

$(document).ready(function() { 
  $('a').click( function(event) {
    $(this).hide();
    event.preventDefault();
  });
});

Код в режиме noConflict:

var $jq = jQuery.noConflict();
$jq(document).ready(function() { 
  $jq('a').click( function(event) {
    $jq(this).hide();
    event.preventDefault();
  });
});

Решение было найдено здесь: http://zenverse.net/jquery-how-to-fix-the-is-not-a-function-error-using-noconflict/

Вы не смогли загрузить slick.js файл. Добавить этот файл скрипта https://kenwheeler.github.io/slick/slick/slick.js,

Я обновил ваш JSFiddle, добавив внешний файл на левой боковой панели External Resources, Тогда это не сообщает об ошибке: $(...).slick is not a function,

Трудно сказать, не глядя на полный код, но этот тип ошибки

Uncaught TypeError: $(...).slick is not a function

Обычно означает, что вы либо забыли включить slick.js на страницу, либо включили его до jquery.

Убедитесь, что jquery является первым файлом js, и вы включили библиотеку slick.js после него.

Я подумал, что это будет полезно для других с такой же проблемой, как я видел несколько здесь - я столкнулся с этим, но обнаружил, что я загрузил slick.js ПОСЛЕ моего main.js (который вызывал функцию slick()). поменял местами два, и это прекрасно работает

Пытаться:

function initSlider(){
    $('.references').slick({
        dots: false,
        infinite: true,
        speed: 300,
        slidesToShow: 1,
        autoplay: true,
        prevArrow: '<div class="slick-prev"><i class="fa fa-chevron-left"></i></div>',
        nextArrow: '<div class="slick-next"><i class="fa fa-chevron-right"></i></div>'
    });
}

$(document).on('ready', function () {
    initSlider();
});

Также, чтобы быть уверенным, убедитесь, что вы включили JS-файл для слайдера после того, как включили jQuery, и перед тем, как включить приведенный выше код для инициализации.

Старый вопрос, но у меня есть только один недавний файл jQuery (v3.2.1) (слик также включен, конечно), и у меня все еще есть эта проблема. Я исправил это так:

function initSlider(selector, options) {
    if ($.fn.slick) {
        $(selector).slick(options);
    } else {
        setTimeout(function() {
            initSlider(selector, options);
        }, 500);
    }
}

//example: initSlider('.references', {...slick's options...});

Эта функция пытается нанести пятно 2 раза в секунду и останавливается после того, как она заработала. Я не анализировал это глубоко, но я думаю, что инициализация слика откладывается.

У меня такая же проблема. Когда я пытался и тестировал в браузере на моем ПК, у меня не было ошибки "не функция", но когда я пытался на виртуальной машине, ошибка выскочила. Я решил эту проблему, добавив файлы Slick на свой веб-сервер и добавив URL-адреса файлов CSS и JS с моего веб-сервера в мой HTML-файл. До этого я тянул css и js из CDN.

Я не уверен на 100%, но я полагаю, что ошибка была вызвана некоторым клиентским JavaScript, который превращал экспорт в объект. Некоторый код в плагине Slick (см. Ниже) вызывает функцию require, если export не определен.

Вот часть кода, которую мне пришлось изменить в slick.js. Вы можете видеть, что я просто комментирую операторы if, и вместо этого я просто вызываю factory(jQuery).

;(function(factory) {
console.log('slick in factory', define, 'exports', exports, 'factory', factory);
'use strict';
// if (typeof define === 'function' && define.amd) {
//     define(['jquery'], factory);
// } else if (typeof exports !== 'undefined') {
//     module.exports = factory(require('jquery'));
// } else {
//     factory(jQuery);
// }
factory(jQuery);
}

Я обнаружил, что инициализировал свой слайдер, используя встроенный скрипт в теле, что означало, что он вызывался до того, как был загружен slick.js. Я исправил использование встроенного JS в нижнем колонтитуле для инициализации ползунка после включения файла slick.js.

<script type="text/javascript" src="/slick/slick.min.js"></script>
<script>
    $('.autoplay').slick({
        slidesToShow: 1,
        slidesToScroll: 1,
        autoplay: true,
        autoplaySpeed: 4000,
    });

</script>

У меня была такая же проблема, прежде чем я узнал, что я поместил код после закрытия тега body. Переместив его в тег, теперь все нормально

<body>
$(document).ready(function(){
    $('.multiple-items').slick({
        infinite: true,
        slidesToShow: 3,
        slidesToScroll: 3
    });
});
</body>

В моем случае решение было перемещать JQuery включить непосредственно перед </head> тег. С сликом включить в нижней части перед </body> и как раз перед включением моего скрипта, который запускает слайдер.

Убедитесь, что вы связываете файл slick.min.js перед функцией slick jQuery, а функция slick JQuery появляется после файла slick.min.js.

Я решаю эту проблему, просто добавляя https: к гладкой ссылке cdn, полученной из гладкой

Включите тег скрипта до того, как гладкая функция будет использоваться в вашем шаблоне HTML.

<script type="text/javascript" src="http://cdn.jsdelivr.net/jquery.slick/1.3.15/slick.min.js"></script>

Убедитесь, что или slick.min.js правильно связаны. если slick.min.js неправильно связан, он показывает этот тип ошибки.

cndhttps://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.6.0/slick.min.js

Если вы хотите управлять ползунком Slick.js, вы можете использовать

Для следующего

      $('slick_selector').slick("slickNext");  

Для Пред.

      $('slick_selector').slick("slickPrev"); 

Для версии > 1.5

вы не включили ссылку на пятно

      <link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" rel="stylesheet">
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
<link href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.min.css" rel="stylesheet">
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.8.1/slick.min.js"></script>

Для меня проблема решается после того, как я изменился:

<script type='text/javascript' src='../../path-to-slick/slick.min.js'></script>

в

<script src='../../path-to-slick/slick.min.js'></script>

Моя работа основана на Jquery 2.2.4, и я работаю над последними версиями Xampp и Chrome.

for laravel code js issue

//step 3
//@section('home')
<script>
$('.classname').slick({
        slidesToShow: 3,
        slidesToScroll: 1,
        autoplay: true,
        autoplaySpeed: 2000,
        });
</script>
//@endsection
<div class="classname"></div>
step-1 //initialize in header section for link 
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick.min.js"></script>

step-2 //body code of .classname

В Laravel я решаю:

app.sccs

      // slick
@import "~slick-carousel/slick/slick";
@import "~slick-carousel/slick/slick-theme";

bootstrap.js

      try {
   window.Popper = require('popper.js').default;
   window.$ = window.jQuery = require('jquery');
   require('bootstrap');
   require('slick')
   require('slick-carousel')
} 

package.json

      "jquery": "^3.2",
"slick": "^1.12.2",
"slick-carousel": "^1.6.0"

example.js

      $('.testimonial-active').slick({
    dots: false,
    arrows: true,
    prevArrow: '<span class="prev"><i class="mdi mdi-arrow-left"></i></span>',
    nextArrow: '<span class="next"><i class="mdi mdi-arrow-right"></i></span>',
    infinite: true,
    autoplay: true,
    autoplaySpeed: 5000,
    speed: 800,
    slidesToShow: 1,
});
Другие вопросы по тегам