Uncaught TypeError: Cannot read property 'top' of undefined
如果这个问题已经得到解答,我道歉。 我试过寻找解决方案,但找不到任何适合我的代码。 我还是jQuery的新手。
我有两种不同类型的粘性菜单,用于两个不同的页面。 这是两者的代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | $(document).ready(function () { var contentNav = $('.content-nav').offset().top; var stickyNav = function () { var scrollTop = $(window).scrollTop(); if (scrollTop > contentNav) { $('.content-nav').addClass('content-nav-sticky'); } else {; $('.content-nav').removeClass('content-nav-sticky') } }; stickyNav(); $(window).scroll(function () { stickyNav(); }); }); $(document).ready(function () { var stickyNavTop = $('.nav-map').offset().top; // var contentNav = $('.content-nav').offset().top; var stickyNav = function () { var scrollTop = $(window).scrollTop(); if (scrollTop > stickyNavTop) { $('.nav-map').addClass('sticky'); // $('.content-nav').addClass('sticky'); } else { $('.nav-map').removeClass('sticky'); // $('.content-nav').removeClass('sticky') } }; stickyNav(); $(window).scroll(function () { stickyNav(); }); }); |
我的问题是底部粘性侧菜单的代码不起作用,因为第二行代码
经过一番研究,我认为问题是
在尝试获取其偏移量之前,请检查jQuery对象是否包含任何元素:
1 2 3 4 5 | var nav = $('.content-nav'); if (nav.length) { var contentNav = nav.offset().top; ...continue to set up the menu } |
您的文档不包含任何类
你可以在这个小提琴中看到自己
1 | alert($('.content-nav').offset()); |
(你会看到"未定义")
为避免崩溃整个代码,您可以使用此类代码:
1 2 3 4 5 6 | var top = ($('.content-nav').offset() || {"top": NaN }).top; if (isNaN(top)) { alert("something is wrong, no top"); } else { alert(top); } |
更新了小提琴。
我知道这是非常古老的,但我知道这种错误类型是初学者常犯的错误,因为大多数初学者会在他们的头元素被加载时调用他们的函数。看到这个解决方案在这个线程中根本没有解决,我会添加它。这个javascript函数很可能是在加载实际html之前放置的。请记住,如果您在文档准备好之前立即调用javascript,则需要文档中元素的元素可能会找到未定义的值。
您最有可能遇到的问题是页面中某处存在一个不存在的锚点。例如,假设您有以下内容:
1 | Skip to examples |
页面中必须有一个带有该id的元素,例如:
1 | Here are the examples |
因此,请确保每个链接在页面内与其对应的锚点匹配。
我遇到了类似的问题,发现我试图获得页脚的偏移,但是我在脚注之前将div加载到div中。它是这样的:
1 2 3 4 5 | I have some contents $('footer').offset().top; <footer>This is footer</footer> |
所以,问题是,我在页脚加载之前调用了页脚元素。
我将脚本压在页脚下面并且工作正常!
我遇到了同样的问题("Uncaught TypeError:无法读取未定义的属性'top')
我尝试了我能找到的所有解决方案并注意到了帮助。
但后来我发现我的DIV有两个ID。
所以,我删除了第二个ID并且它有效。
我只是希望有人告诉我先检查我的身份证))