0

我使用 Jquery 从我的站点中选择一个 HTML 对象。

<div id="banner">
  <!-- stuff in here -->
</div>

我使用这段代码:

$(window).load($(function()
{
    var elem = $("#banner");
    var top = elem.offset().top;
    var maxTop = $("#footer").offset().top - elem.height();
    var scrollHandler = function()
    {
      var scrollTop = $(window).scrollTop();
      if (scrollTop<top) {
        elem.css({position:"relative",top:""})
      } else if (scrollTop>maxTop) {
        elem.css({position:"absolute",top:(maxTop+"px")})
      } else {
        elem.css({position:"fixed",top:"0px"})
      }
    }
    $(window).scroll(scrollHandler);scrollHandler()

}));

但是我不断收到错误“未捕获的类型错误:无法读取未定义的属性‘顶部’”

出于某种原因,它没有看到 div 'banner'。

知道为什么吗?

编辑:

根据下面的建议,我将代码从 $(window).load 更改为 $(document).ready。还是同样的问题。

$(document).ready($(function()
{
    var elem = $("#banner");
    var top = elem.offset().top;
    var maxTop = $("#footer").offset().top - elem.height();
    var scrollHandler = function()
    {
      var scrollTop = $(window).scrollTop();
      if (scrollTop<top) {
        elem.css({position:"relative",top:""})
      } else if (scrollTop>maxTop) {
        elem.css({position:"absolute",top:(maxTop+"px")})
      } else {
        elem.css({position:"fixed",top:"0px"})
      }
    }
    $(window).scroll(scrollHandler);scrollHandler()

}));
4

2 回答 2

3

您将 jQuery 对象传递给您的加载函数而不是函数。尝试删除主回调周围的 $()。例如

$(window).load(function()
{
var elem = $("#banner");
var top = elem.offset().top;
var maxTop = $("#footer").offset().top - elem.height();
var scrollHandler = function()
{
  var scrollTop = $(window).scrollTop();
  if (scrollTop<top) {
    elem.css({position:"relative",top:""})
  } else if (scrollTop>maxTop) {
    elem.css({position:"absolute",top:(maxTop+"px")})
  } else {
    elem.css({position:"fixed",top:"0px"})
  }
}
$(window).scroll(scrollHandler);scrollHandler()

});

注意:这里有些人建议使用 $(window).load() 而不是 $(document).ready() 本身并没有错。第二个更惯用,因为它执行得更早(让用户更快地与您的页面交互)。有关详细信息,请参阅此链接:http: //4loc.wordpress.com/2009/04/28/documentready-vs-windowload/

于 2012-11-05T18:59:14.063 回答
1
$(window).load($(function()   // Passing a jQuery Object Here

应该是

$(window).load( function()   //  

如果这不起作用,请将其替换为

$(document).ready( function() 
于 2012-11-05T18:58:23.810 回答