从 jQuery 1.9.1 迁移到 1.10.1 导致错误:对象没有方法
Posted
技术标签:
【中文标题】从 jQuery 1.9.1 迁移到 1.10.1 导致错误:对象没有方法【英文标题】:Migrating from jQuery 1.9.1 to 1.10.1 causing error: Object has no method 【发布时间】:2013-10-17 20:01:56 【问题描述】:View my jsFiddle
将 html 预览调整为小宽度并查看幻灯片的大小是否正确调整
将 jQuery 从 1.9.1 更改为 1.10.1(在左窗格中)并单击“运行”
将 HTML 预览调整为小宽度或大宽度
打开控制台,看到错误:Object [object Object] has no method 'bjqs'
我无法弄清楚 bjqs 插件是如何导致 1.10.1 出现此问题的。
插件是否有什么问题阻止它在 resize 函数中第二次被调用?
此处包含 javascript,但上面链接的 jsFiddle 将是查看它的更好位置。
我使用的插件是:http://www.basic-slider.com/
$(function ()
$(window).resize(function ()
if (this.resizeTO) clearTimeout(this.resizeTO);
this.resizeTO = setTimeout(function ()
slideShow(); // re-init on resize stop
, 500);
);
function slideShow()
$('.bjqs-controls, .bjqs-markers').remove();
console.log($(window).width());
var ss_width;
var ss_height;
if ($(window).width() >= 600)
// Desktop
ss_width = 300;
ss_height = 200;
else if ($(window).width() < 600)
// Tablet
ss_width = 150;
ss_height = 150;
// Load content slideshow
$('#banner-slide').bjqs(
nexttext: 'Next',
prevtext: 'Prev',
showmarkers: true,
centermarkers: true, // horizontally center markers
responsive: false, // enable responsive behaviour
width: ss_width,
height: ss_height
);
// Init slide show on load
slideShow();
);
【问题讨论】:
JSFiddle 中的某些内容实际上是在将 jQuery 更改为 1.10.1 时加载 second 实例。如果您使用 Chrome DevTools 并检查加载在小提琴页面上的资源,您将看到来自 assets.pinsightmedia.com 的 jQuery pop in(1.10.2) 版本,当您使用 1.9.x 时不存在该版本。该错误可能是因为滑块插件加载到一个实例而不是另一个实例。 lightbox 插件不支持 jQuery 1.10,因为它将其视为 jquery 1.1 并加载到它自己的 jquery 版本中,完全破坏了一切。糟糕的插件设计imo。 所述插件中错误的根本原因是/^\d\.\d+/i.exec(jQuery.fn.jquery))<1.6
它使用字母数字排序将字符串 1.10 与 1.6 进行比较,因此 1.6 > "1.10",因此它包含它自己的版本并且不正确防止冲突。
凯文,漂亮的抓地力。请将您的评论转换为答案,以便我奖励积分。
@KevinB 你能把你的评论转换成答案吗?
【参考方案1】:
所述插件中错误的根本原因是/^\d\.\d+/i.exec(jQuery.fn.jquery))<1.6
它使用字母数字排序将字符串“1.10”与“1.6”进行比较,因此“1.6”>“1.10”,因此它包含它自己的版本并且不包含适当防止冲突。我建议将此作为错误报告给插件作者,修复它应该是微不足道的。
【讨论】:
以上是关于从 jQuery 1.9.1 迁移到 1.10.1 导致错误:对象没有方法的主要内容,如果未能解决你的问题,请参考以下文章
从原型迁移到 Jquery Rails,empty() 函数不起作用