多个jQuery / jQueryUI错误突然出现

时间:2013-01-16 08:54:20

标签: jquery jquery-ui

我几周前编写了我的示例网站。它工作得很好,但现在却没有。它是在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 个答案:

答案 0 :(得分:2)

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

请参阅: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>

答案 1 :(得分:1)

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

您正在使用最新的jQuery。此版本可能已删除或更改您正在使用的内容。我建议你保持你创建页面的版本而不是获取最新的版本。这样,由于版本差异,它永远不会破坏。

答案 2 :(得分:0)

“无法读取属性'msie'未定义”

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

答案 3 :(得分:0)

我设法在仍然使用最新的jQuery时修复此错误。我对Superfish菜单脚本的调用给了我“无法读取属性'msie'未定义”错误,当我从它调用它时:

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

但是,然后我把它改为:

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

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