从 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))&lt;1.6 它使用字母数字排序将字符串 1.10 与 1.6 进行比较,因此 1.6 > "1.10",因此它包含它自己的版本并且不正确防止冲突。 凯文,漂亮的抓地力。请将您的评论转换为答案,以便我奖励积分。 @KevinB 你能把你的评论转换成答案吗? 【参考方案1】:

所述插件中错误的根本原因是/^\d\.\d+/i.exec(jQuery.fn.jquery))&lt;1.6 它使用字母数字排序将字符串“1.10”与“1.6”进行比较,因此“1.6”>“1.10”,因此它包含它自己的版本并且不包含适当防止冲突。我建议将此作为错误报告给插件作者,修复它应该是微不足道的。

【讨论】:

以上是关于从 jQuery 1.9.1 迁移到 1.10.1 导致错误:对象没有方法的主要内容,如果未能解决你的问题,请参考以下文章

将条件样式从 jQuery 迁移到 AngularJS

从 YUI 数据表迁移到 Jquery 数据表时的提示

从原型迁移到 Jquery Rails,empty() 函数不起作用

jquery 1.9.1 .trigger() 没有将参数传递给点击处理程序

Magento 迁移到 AWS 后的问题

JQMIGRATE:jQuery.browser 已弃用,无法读取未定义的属性“mozilla”