无法获取未定义或空引用的属性“top”(IE 11)

5

我对JavaScript相当不熟悉,现在正在使用一个模板。但是在Internet Explorer中出现了错误,而在其他浏览器中却可以正常工作。目前还无法找到问题所在。

$('.navbar a, .navbar li a, .brand, #footer li a, .more a, a.go-top')
  .bind('click', function(event) {
    var $anchor = $(this),
    scrollVal = $($anchor.attr('href')).offset().top - 60;

    if (scrollVal < 0) {
      scrollVal = 0;
    }

    $('[data-spy="scroll"]').each(function() {
      $(this).scrollspy('refresh');
    });

    $.scrollTo(scrollVal, {
      easing: 'easeInOutExpo',
      duration: 1500
    });

    event.preventDefault();
  });

有什么想法是为什么会出现这种情况吗?

1
$($anchor.attr('href')) 没有找到任何匹配的元素。您需要进行一些调试。$anchor.attr("href") 的值是什么?它是一个标签名吗?当您遇到错误时,请使用 console.log() 确认程序中的值是否符合您的预期。 - cookie monster
2
你是说它在其他浏览器中可以正常工作,只有IE11不能?你的问题几乎包含了足够的信息来回答,但还不够完整。大多数涉及DOM选择的问题需要包括用于创建DOM的HTML。 - cookie monster
有多个链接在HTML页面中使用滚动功能...我不能把整个页面都放进去,对吧? - enter_the_natrix
1
你需要做的第一步是调试,如果你仍然无法解决问题,就在问题中展示你调试的结果,并将 HTML 和 JS 缩小到一个最小的例子,以成功演示问题。 - cookie monster
@Ejay请给我点时间,我正在努力工作。:( - enter_the_natrix
1个回答

3
你看到的错误在第4行。
    scrollVal = $($anchor.attr('href')).offset().top - 60;

这通常是因为你在尝试使用对象的属性,但该属性未被定义。

在你的情况下,$($anchor.attr('href')).offset() 可能未定义, 你需要查看 $anchor 是否未定义或者没有 href 属性,那么它就不能拥有 offset。

你可以使用开发者工具(F12)和断点来检查值。

你可以在这里了解如何使用控制台: 如何使用控制台

祝好运!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接