2

我的网站上一切正常,但由于某种原因,每当我单击网站上任何位置的链接时,我都会在控制台中收到一条错误消息。该错误与此处的这行编码有关:

jQuery(function($){
  $('.navbar a, .scroll a, .smoothscroll a').bind('click',function(event){
    var $anchor = $(this);

    $('html, body').stop().animate({
        scrollTop: $($anchor.attr('href')).offset().top
    }, 850,'easeInOutExpo');

    event.preventDefault();
  });
});

我得到的错误是:

“SCRIPT5007:无法获取属性 'top' 的值:对象为 null 或未定义 custom.min.js,第 6 行字符 197”

它突出显示的确切代码是上述代码的这一部分:

$('html, body').stop().animate({
  scrollTop: $($anchor.attr('href')).offset().top
}, 850,'easeInOutExpo')

我所知道的是,当我删除上述代码时,我的滚动到链接停止在以下页面上工作:

http://www.northtownsremodeling.com/things-to-know.php

您可以通过转到带有如下过滤器的页面来查看弹出错误并轻松地留在控制台中:

http://www.northtownsremodeling.com/bathroom/

并单击其中一个过滤器按钮。

最终,我试图做到这一点,以便我的滚动到设置仍然有效,但不再出现该错误。我很久以前制作了这个脚本,当一切正常运行时,我真的很困惑是什么导致了这个错误?

谢谢!

4

2 回答 2

5

您遇到的问题是给出错误的代码是用于滚动到预定义的 div,并且您在 url 的标签(单击链接的 href 属性)中有它的 id(目标 div)。

当您单击“普通”链接时,这是问题,因为它不包含标签,它是页面上存在的元素的 id,所以$($anchor.attr('href'))给出空数组,因为没有可以用 ie 选择的元素$("http://www.northtownsremodeling.com/alliances.php"),所以在这种情况下偏移() 未定义并给您一个错误。

要解决此问题,请替换:

$('html, body').stop().animate({
    scrollTop: $($anchor.attr('href')).offset().top
}, 850,'easeInOutExpo');

和:

// get target div to scroll to
var target = $($anchor.attr('href'));
// if target is valid, scroll to
if(target && target.offset()){
    $('html, body').stop().animate({
        scrollTop: target.offset().top
    }, 850,'easeInOutExpo');
}
于 2012-09-19T03:34:34.343 回答
1

演示:http: //jsfiddle.net/SWgYD/

我认为这是因为href属性不包含正确的选择器。如果链接符合 id 的块nav,则链接的href属性应该是#nav

您应该只将事件处理程序绑定到导航链接。

于 2012-09-19T03:33:04.050 回答