使用strict会引发错误

时间:2016-01-13 00:59:39

标签: javascript jquery

我有以下代码,可以让我滚动到我的网页上的某个位置。但是当我使用Strict时,我收到以下错误:

TypeError:undefined不是对象(评估' refElement.position()。top') (匿名函数)主要:34

ReferenceError:无法找到变量:$ target (匿名函数)main.js:17

有人可以解释为什么当我使用严格时它不起作用,当我评论它时它是什么?我如何让它工作?

由于

代码:

    'use strict';
    $(document).ready(function() {

    $(document).on("scroll", onScroll);

    //smoothscroll
    $('a[href^="#"]').on('click', function (e) {
        e.preventDefault();
        $(document).off("scroll");

        $('a').each(function () {
            $(this).removeClass('active');
        })
        $(this).addClass('active');

        var target = this.hash,
            menu = target;
        $target = $(target);
        $('html, body').stop().animate({
            'scrollTop': $target.offset().top+2
        }, 500, 'swing', function () {
            window.location.hash = target;
            $(document).on("scroll", onScroll);
        });
    });


});

function onScroll(event){
    var scrollPos = $(document).scrollTop();
    $('#menu-center a').each(function () {
        var currLink = $(this);
        var refElement = $(currLink.attr("href"));
        if (refElement.position().top <= scrollPos && refElement.position().top + refElement.height() > scrollPos) {
            $('#menu-center ul li a').removeClass("active");
            currLink.addClass("active");
        }
        else{
            currLink.removeClass("active");
        }
    });
}

2 个答案:

答案 0 :(得分:2)

您的var声明中包含分号而不是逗号:

    var target = this.hash,
        menu = target;
    $target = $(target);

应该是:

    var target = this.hash,
        menu = target,
        $target = $(target);

因为$target的赋值不是var语句的一部分,所以它表示对隐式全局变量的赋值。在&#34; strict&#34;中不允许这样做模式。

答案 1 :(得分:0)

您的refElement是一个字符串(因为您为href分配了currLink属性),然后您尝试在其上调用position()方法。也许你的意思是currLink.position().top + currLink.height()