在函数中,jQuery选择器返回PreviousObject而不是选定的对象

时间:2014-10-24 09:10:42

标签: javascript jquery css

我正在尝试将我网站上的第二个菜单粘贴到顶层菜单中,我在两个引导列(col-8和col-4)中有几个菜单。所以,虽然我在函数中使用了jQuery选择器,但它运行良好。但是当我决定重构我的代码并创建一个将类作为参数的函数时,它实际上停止了正常工作。 Element $ element只是一个div元素,类为“.navbar.navbar-default.stick-left”。

这里是代码:

var stickelement = function(classid) {
    $element = $(classid);
    console.log($element);
    if ($element.length) {

        elementOffset = $element.offset().top;

        $(window).scroll(function (e) {
            scrollTop = $(window).scrollTop() + $('.navbar.navbar-default.navbar-fixed-top').height();
            distance = elementOffset - scrollTop;

            if (distance < 0 && $element.css('position') != 'fixed') {
                $element.css({
                    'position': 'fixed',
                    'margin': '0px',
                    'top': ($('.navbar.navbar-default.navbar-fixed-top').height()).toString() + 'px'
                });
            }
            if (distance > 0 && $element.css('position') == 'fixed') {
                $element.css({'position': 'static', 'margin': '50px'});
            }
        });
    }
};

stickelement(".navbar.navbar-default.stick-left");

重新加载页面后,我在我的控制台中只看到了n.fn.init [0],其中原型对象内部有一个“top”字段,长度为0。

我在哪里弄错了?

1 个答案:

答案 0 :(得分:0)

所以,我解决了我的问题,但第二个问题已经出现了。我试图使用两个调用$(window).scroll异步调用:

var stickelement = function(classid) {
    $element = $(classid);
    console.log($element);
    if ($element.length) {
        elementOffset = $element.offset().top;

        $(window).scroll(function (e) {
            scrollTop = $(window).scrollTop() + $('.navbar.navbar-default.navbar-fixed-top').height();
            distance = elementOffset - scrollTop;

            if (distance < 0 && $element.css('position') != 'fixed') {
                $element.css({
                    'position': 'fixed',
                    'margin': '0px',
                    'top': ($('.navbar.navbar-default.navbar-fixed-top').height()).toString() + 'px'
                });
            }
            if (distance > 0 && $element.css('position') == 'fixed') {
                $element.css({'position': 'static', 'margin': '50px'});
            }
        });
    }
};

stickelement('.stick-left');
stickelement('.stick-right');

但他们并不同时工作。只有两个菜单中的一个可以通过这种方式粘在顶部。 如何纠正我的解决方案,以便将两个菜单粘贴到顶部菜单?