不知怎的,我无法正确使用光滑的旋转木马(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)与bower一起包含在内。我也尝试将jQuery CDN包含在我的布局模板文件的头部,但这也没有解决任何问题。
唯一可能意味着什么是奇怪的是,当我不使用函数调用滑块时,它确实有效,但它给了我错误:
Uncaught TypeError: Cannot read property 'add' of null
我发现这意味着代码已经在加载DOM之前加载了,这是正确的(我认为)。
提前致谢!
编辑:我已经从我的代码创建了一个JSFiddle:https://jsfiddle.net/brz30e77/
EDIT2:在我的JS文件中添加新函数时,错误一直存在。我最终剥离了我的串联JS文件,发现有两个版本的jQuery被加载,其中一个非常非常老。
我后来自己找到了解决方案,所以我把它作为答案:
在我的JS文件中添加新函数时,错误一直存在。我最终删除了我的串联JS文件,发现有两个版本的jQuery被加载,其中一个非常非常老。
在确认我在关闭body标签后放置代码之前,我遇到了同样的问题。将它移动到标签后,现在就可以了
<body>
$(document).ready(function(){
$('.multiple-items').slick({
infinite: true,
slidesToShow: 3,
slidesToScroll: 3
});
});
</body>
我不是百分百肯定,但我相信这个错误是由一些客户端JavaScript导致导出成为一个对象引起的。如果导出未定义,则Slick插件中的某些代码(见下文)会调用require函数。
这是我必须在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>
对我来说,问题在我改变后解决:
<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上运行我的开发。
最近遇到了同样的问题:TypeError:$(...)。slick不是一个函数
找到一个有趣的解决方希望,对某些人来说可能有用。
在我的特殊情况下有:jQuery + WHMCS +光滑。它可以正常独立运行,没有WHMCS。但在与WHMCS集成后会出现错误。
解决方案是在noConflict模式下使用jQuery。
例如:你的代码:
$(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/
认为这对于有同样问题的其他人会有所帮助,就像我在这里看到的一些 - 我碰到了这个,但发现我在我的main.js之后加载了slick.js(它调用了slick()函数)。换了两个,效果很好
没有查看完整代码但很难说这种类型的错误
Uncaught TypeError: $(...).slick is not a function
通常意味着您忘记在页面中包含slick.js或者在jquery之前包含它。
确保jquery是第一个js文件,然后在其后面包含slick.js库。
您无法加载slick.js
文件。添加此脚本文件https://kenwheeler.github.io/slick/slick/slick.js
。
我在左侧边栏JSFiddle上添加了一个外部文件,更新了你的External Resources
。然后它不报告错误:$(...).slick is not a function
。
尝试:
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();
});
另外,确保在包含jQuery之后以及在上面的代码中包含初始化之前,请确保包含滑块的JS文件。
旧的问题,但我只有一个最近的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次光滑,并在使其工作后停止。我没有深入分析它,但我认为光滑的初始化正在推迟。
我有同样的问题。当我在我的PC机上的浏览器上尝试和测试时,我没有“非功能”错误,但是当我尝试虚拟机时,错误突然出现。我通过在我的Web服务器上添加光滑文件并将我的Web服务器中的css和js文件的URL添加到我的html来解决它。在此之前,我从CDN拉出css和js。
在我的实例中,解决方案是在</head>
标记之前移动jQuery包含。 Slick包含在</body>
之前的底部,并且在我的脚本包括之前启动滑块。