未捕获的TypeError:无法读取未定义的属性“top” - 滚动错误?

时间:2018-02-17 14:16:28

标签: javascript html

这是我的HTML:

<ul class="nav-list">
   <li class="current"><a class="smoothscroll" href="#home" title="">Home</a></li>
    <li><a class="smoothscroll" href="signup.html" title="">Sign up</a></li>
    <li><a class="smoothscroll" href="signin.html" title="">Sign in</a></li>                
</ul>

这是我的JavaScript:

var ssSmoothScroll = function() {
    $('.smoothscroll').on('click', function (e) {
        var target = this.hash,
        $target    = $(target);

        e.preventDefault();
        e.stopPropagation();        

        $('html, body').stop().animate({
            'scrollTop': $target.offset().top
        }, cfg.scrollDuration, 'swing').promise().done(function () {
           // check if menu is open
           if ($('body').hasClass('menu-is-open')) {
               $('#header-menu-trigger').trigger('click');
           }

           window.location.hash = target;
        });
    });
};

我搜索了几个答案,仍然无法找到我的工作原因。非常感谢任何帮助。

我想继续使用signup.html或signin.html,但如果单击它们,这两个链接都不起作用。它们只有在我右键单击并在新选项卡中打开时才有效。

1 个答案:

答案 0 :(得分:1)

offset返回undefined的唯一原因是你在一个空的jQuery集上调用它。这告诉我们$(target)返回一个空的jQuery集,大概是因为target包含一个与任何元素都不匹配的选择器。

您可能希望添加一个警卫以允许:

if (!$target.length) {
    return;
}

...就在$target = ...之后。

查看您的HTML:您可能只想从将您带到另一个页面的链接中移除smoothscroll类(在您的示例中为后两个)。他们似乎唯一的目的是跳转到页面滚动中的锚点而不是跳转。由于这些链接是在页面外的,我首先不会把它放在它们上面。