Javascript Wordpress主题上的未捕获类型错误
不幸的是,我买了一个没有支持的Wordpress模板,现在我试着自己调试它 我无法解决的一个bug是关于JQuery的递归控制台错误。具体来说,每当我用鼠标滚动时,它就会触发Javascript Wordpress主题上的未捕获类型错误,javascript,jquery,Javascript,Jquery,不幸的是,我买了一个没有支持的Wordpress模板,现在我试着自己调试它 我无法解决的一个bug是关于JQuery的递归控制台错误。具体来说,每当我用鼠标滚动时,它就会触发 未捕获类型错误:无法读取未定义的属性“top” 错误的Javascript代码如下所示: jQuery(window).scroll(function(){ var windowPos = jQuery(window).scrollTop(); // get the offset of the window
未捕获类型错误:无法读取未定义的属性“top”
错误的Javascript代码如下所示:
jQuery(window).scroll(function(){
var windowPos = jQuery(window).scrollTop(); // get the offset of the window from the top of page
var windowHeight = jQuery(window).height(); // get the height of the window
var docHeight = jQuery(document).height();
for (var i=0; i < aArray.length; i++) {
if( aArray[i].indexOf("#") != -1) {
var theID = aArray[i].substr(aArray[i].indexOf("#"));
if (theID.length) {
var divPos = jQuery(theID).offset().top; // HERE IS THE ERROR, get the offset of the div from the top of page
var divHeight = jQuery(theID).height(); // get the height of the div in question
if (windowPos >= divPos && windowPos < (divPos + divHeight)) {
if(jQuery("a[href='" + theID + "']").length) {
jQuery("a[href='" + theID + "']").addClass("nav-active");
}
else if(jQuery("a[href='" + aArray[i] + "']").length) {
jQuery("a[href='" + aArray[i] + "']").addClass("nav-active");
}
} else {
if(jQuery("a[href='" + theID + "']").length) {
jQuery("a[href='" + theID + "']").removeClass("nav-active");
}
else if(jQuery("a[href='" + aArray[i] + "']").length) {
jQuery("a[href='" + aArray[i] + "']").removeClass("nav-active");
}
}
}
}
}
if(windowPos + windowHeight == docHeight) {
if (!jQuery("nav li:last-child a").hasClass("nav-active")) {
var navActiveCurrent = $(".nav-active").attr("href");
jQuery("a[href='" + navActiveCurrent + "']").removeClass("nav-active");
jQuery("nav li:last-child a").addClass("nav-active");
}
}
});
jQuery(窗口)。滚动(函数(){
var windowPos=jQuery(window.scrollTop();//获取窗口从页面顶部的偏移量
var windowHeight=jQuery(window).height();//获取窗口的高度
var-docHeight=jQuery(document).height();
对于(var i=0;i=divPos&&windowPos<(divPos+divHeight)){
if(jQuery(“a[href=”“+theID+””).length){
jQuery(“a[href=”“+theID+”]”)addClass(“nav活动”);
}
else if(jQuery(“a[href=”+aArray[i]+“]”).length){
jQuery(“a[href=”+aArray[i]+“]”)addClass(“导航活动”);
}
}否则{
if(jQuery(“a[href=”“+theID+””).length){
jQuery(“a[href=”“+theID+”]”)。removeClass(“nav活动”);
}
else if(jQuery(“a[href=”+aArray[i]+“]”).length){
jQuery(“a[href=”+aArray[i]+“]”)removeClass(“导航活动”);
}
}
}
}
}
如果(窗口位置+窗口高度==8){
if(!jQuery(“nav li:最后一个子项a”).hasClass(“nav活动”)){
var navActiveCurrent=$(“.nav active”).attr(“href”);
jQuery(“a[href=”+navActiveCurrent+“]”)。removeClass(“NavActive”);
jQuery(“nav li:最后一个子a”).addClass(“nav活动”);
}
}
});
该错误在
var divPos=jQuery(theID).offset()行激发代码>。我手动添加了if语句
,以检查是否存在theID
变量,然后执行代码,但仍然会在浏览器控制台上触发错误。如果脚本在DOM中找不到对象,它将断开。尝试检查它是否存在
if (theID.length) {
// Check if you find the object in the DOM
if(jQuery(theID).length > 0) {
var divPos = jQuery(theID).offset().top; // HERE IS THE ERROR, get the offset of the div from the top of page
var divHeight = jQuery(theID).height(); // get the height of the div in question
if (windowPos >= divPos && windowPos < (divPos + divHeight)) {
if(jQuery("a[href='" + theID + "']").length) {
jQuery("a[href='" + theID + "']").addClass("nav-active");
}
else if(jQuery("a[href='" + aArray[i] + "']").length) {
jQuery("a[href='" + aArray[i] + "']").addClass("nav-active");
}
} else {
if(jQuery("a[href='" + theID + "']").length) {
jQuery("a[href='" + theID + "']").removeClass("nav-active");
}
else if(jQuery("a[href='" + aArray[i] + "']").length) {
jQuery("a[href='" + aArray[i] + "']").removeClass("nav-active");
}
}
}
}
if(id.length){
//检查是否在DOM中找到该对象
if(jQuery(theID).length>0){
var divPos=jQuery(theID).offset().top;//这是一个错误,从页面顶部获取div的偏移量
var divHeight=jQuery(theID).height();//获取相关div的高度
if(windowPos>=divPos&&windowPos<(divPos+divHeight)){
if(jQuery(“a[href=”“+theID+””).length){
jQuery(“a[href=”“+theID+”]”)addClass(“nav活动”);
}
else if(jQuery(“a[href=”+aArray[i]+“]”).length){
jQuery(“a[href=”+aArray[i]+“]”)addClass(“导航活动”);
}
}否则{
if(jQuery(“a[href=”“+theID+””).length){
jQuery(“a[href=”“+theID+”]”)。removeClass(“nav活动”);
}
else if(jQuery(“a[href=”+aArray[i]+“]”).length){
jQuery(“a[href=”+aArray[i]+“]”)removeClass(“导航活动”);
}
}
}
}
你能console.log(theID)
快速浏览一下它是什么吗?它是菜单项的锚。然而,vlarsson的解决方案使错误停止上升。可能我的if语句
还不够。我添加的第一个if语句
不是做了与您相同的事情吗?它只检查字符串theID是否已设置。如果找不到jQuery(theID);offset()不起作用。所以你可以删除它,只使用我的支票:)