Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Wordpress主题上的未捕获类型错误_Javascript_Jquery - Fatal编程技术网

Javascript Wordpress主题上的未捕获类型错误

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

不幸的是,我买了一个没有支持的Wordpress模板,现在我试着自己调试它

我无法解决的一个bug是关于JQuery的递归控制台错误。具体来说,每当我用鼠标滚动时,它就会触发

未捕获类型错误:无法读取未定义的属性“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()不起作用。所以你可以删除它,只使用我的支票:)