我几周前编写了我的示例网站。它工作得很好,但现在却没有。它是在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();
答案 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(); });
错误消失,这表明这是一个加载顺序计时问题。