0

几周前我编写了我的示例网站。它工作得很好,但现在不行了。它从昨天开始,在 Chrome 更新自身之后(或者看起来如此)。

我在控制台中的错误是:

Uncaught TypeError: Cannot read property 'msie' of undefined
Uncaught TypeError: Object [object Object] has no method 'rating' 

它们都是由我一直使用的 jQuery 插件(jQuery Form、jQuery StarRating、jQuery UI 等)引起的。另外,当我悬停一个show与 jQueryUI 一起使用的元素时,我得到了

Uncaught TypeError: Property '#<Object>' of object #<Object> is not a function 

我的JS代码如下:

(function($){})(window.jQuery);
$(document).ready(function() {

    /* T.O.C.

    1. Top
    1.0 | Header
    1.1 | Main Menu
    1.2 | Placeholders
    2. Content
    2.1 | Left
    2.1.1 | Box covers
    3. Sidebar
    3.1 | Rates

     */
});

/* 1.0 | Top */
// 1.1 | Main Menu
function searchInput() {
    var totalWidth = 0;
    var n = parseInt(0);
    $('nav#mainMenu ul li:not(.search)').each(function() {
        totalWidth += parseInt($(this).outerWidth(true));
    });
    var inp = 919 - totalWidth;
    $('nav#mainMenu ul li.search form input').width(inp);
};

function slideMenu() {
    $('nav#mainMenu ul li:not(:first), nav#mainMenu ul li ul:not(li a)').each(function() {
        $(this).mouseenter(function() {
            $(this).children('a').addClass('active');
            var left = $(this).outerWidth(true),
                width = 0;
            if($(this).hasClass('help')) { // IF HELP
                $(this).prevAll('li').each(function() {
                    width += $(this).outerWidth(true);
                });
            } else { // ELSE
                $(this).nextAll('li').each(function() {
                    width += $(this).outerWidth(true);
                });
            }

            var width = width + 1;

            if($(this).hasClass('help')) {
                $(this).children('ul').css({ 'right':left, 'width':width });
                $(this).children('ul').show('slide', { direction: 'right' }, 250);
            } else {
                $(this).children('ul').css({ 'left':left, 'width':width });
                $(this).children('ul').show('slide', { direction: 'left' }, 250);
            }
        });
        $(this).mouseleave(function() {
            if($(this).hasClass('help')) {
                $(this).children('ul').hide('slide', { direction: 'right' }, 250, function() {
                    $(this).parent('li').children('a').removeClass('active');
                });
            } else {
                $(this).children('ul').hide('slide', { direction: 'left' }, 250, function() {
                    $(this).parent('li').children('a').removeClass('active');
                });
            }
        });
    });
};

slideMenu();

searchInput();

/* 1.2 | Placeholder */
function Placeholders() {
    if(!Modernizr.input.placeholder){

        $("input").each(
            function(){
                if($(this).val()=="" && $(this).attr("placeholder")!=""){
                    $(this).val($(this).attr("placeholder"));
                    $(this).focus(function(){
                        if($(this).val()==$(this).attr("placeholder")) $(this).val("");
                    });
                    $(this).blur(function(){
                        if($(this).val()=="") $(this).val($(this).attr("placeholder"));
                    });
                }
            });

    }
}

Placeholders();

/* 2. Content */

// 2.2.1 | Box covers
function BoxCovers() {
    $('ul.boxlist li').mouseenter(function() {
        $(this).children('div').stop().fadeIn('fast');
    });
    $('ul.boxlist li').mouseleave(function() {
        $(this).children('div').stop().fadeOut('fast');
    });

    $('.boxlist .rate').rating();
    $('.boxlist form.starRated a').attr('title','');
}

BoxCovers();

function Detailed() {
    $('ul.detailed .rate').rating();
    $('ul.detailed form.starRated a').attr('title','');

    $('ul.detailed li').each(function() {
        $(this).removeClass('grid_4').addClass('grid_14 clearfix');
        var img = $(this).children('img').attr('src'),
            img = img.replace('.jpg','-m.jpg');

        $(this).children('img').attr('src',img).addClass('grid_1');
        $(this).children('div').addClass('grid_9');

        $(this).mouseenter(function() {
            $(this).children('div').children('p.own').stop().fadeIn();
        });

        $(this).mouseleave(function() {
            $(this).children('div').children('p.own').stop().fadeOut();
        });
    });
};

Detailed();

/* 3. Sidebar */
// 3.1.  Rates
function sideRates() {
    $('section#grades div ul li').each(function() {
        var percent = $(this).children('b').text(),
            percent = percent.replace('%',''),
            percent = (percent/100),
            totalSpamWidth = $(this).children('span').width(),
            newWidth = totalSpamWidth * percent;

        $(this).children('span').width(newWidth);
    });
};

sideRates();
4

4 回答 4

2

这是因为 jQuery.browser 属性已从 jQuery 1.9 中删除。显然,自 jQuery 1.3 以来,此浏览器检测功能已被弃用,但许多插件/库可能仍然依赖它(jQuery 工具,仅举一个我喜欢在我的项目中使用的名称)。

请参阅:http: //jquery.com/upgrade-guide/1.9/#jquery-browser-removed以供官方参考。

为了快速修复,请使用以前版本的 jQuery,例如:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
于 2013-01-16T11:59:49.027 回答
1

为了得到答案而不是评论:

您正在使用最新的 jQuery。此版本可能已删除或更改了您正在使用的内容。我建议您保留创建页面的版本,而不是获取最新版本。这样它就永远不会因为版本差异而中断。

于 2013-01-16T09:08:15.330 回答
0

“无法读取未定义的属性‘msie’”

这暗示 jQuery 甚至没有加载。检查使用开发人员工具 (F12)、网络选项卡、刷新页面并查看是否有任何脚本/资源出现任何 404 错误。

于 2013-01-16T08:57:26.460 回答
0

我设法修复了这个错误,同时仍然使用最新的 jQuery。当我从以下位置调用 Superfish 菜单脚本时,我调用 Superfish 菜单脚本时出现“无法读取未定义的属性 'msie'”错误:

$(document).ready(function() { startScripts(); });

但是,后来我把它改成了:

$(document).load(function() { startScripts(); });

错误消失了,这表明这是一个加载顺序时序问题。

于 2013-01-17T12:07:38.490 回答