返回的参数显示对象Object

时间:2019-01-23 18:51:56

标签: javascript jquery

我正在尝试创建一个函数,该函数将使用提供的参数并使该项目由sticky代替fixed(用于横幅)。我注意到,只要输入参数,它就只会显示为object Object,而且似乎无法进行转换。

这是有问题的代码:

$(function() {
    var containerIdName = 'div#stickyRemoval';
    $(window).scroll(function(
        var newContainerIdName = containerIdName;

        alert(newContainerIdName);

        var scrollHeight = $(document).height();
        var scrollPosition = $(window).height() + $(window).scrollTop();

        if ((scrollHeight - scrollPosition) / scrollHeight === 0) {
            $(newContainerIdName).css({position: 'sticky'});
        } else {
            $(newContainerIdName).css({position: 'fixed'});
        }
    });
});

我已经输入了一个默认变量供您查看,但实际上它将通过CMS接收。如何转换该变量,以使我的newContainerIdName变量显示为字符串而不是object Object

谢谢!

以PS https://codepen.io/robert9111/pen/BveGaQ为例

1 个答案:

答案 0 :(得分:3)

问题是因为您无法将参数传递给事件处理程序。您在scroll处理程序中引用的变量实际上是引发的Event对象-这就是为什么在将{<1}}强制转换为字符串时会看到它的原因。

要执行所需的操作,只需从处理程序函数中删除参数即可。还请注意,在下面的示例中,首选使用类来修改样式:

[Object object]
$(function() {
  var containerIdName = 'div#stickyRemoval';

  $(window).scroll(function() { // remove the argument here
    var scrollHeight = $(document).height();
    var scrollPosition = $(window).height() + $(window).scrollTop();
    var calc = (scrollHeight - scrollPosition) / scrollHeight;
    $(containerIdName).toggleClass('sticky', calc === 0).toggleClass('fixed', calc !== 0);
  });
});