我正在使用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()
}));然而,我一直收到错误“未捕获TypeError:无法读取未定义的属性'top‘”
由于某种原因,它看不到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()
}));发布于 2012-11-06 02:58:24
$(window).load($(function() // Passing a jQuery Object Here应该是
$(window).load( function() // 如果这不起作用,请将其替换为
$(document).ready( function() 发布于 2012-11-06 02:59:14
您正在将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()
});注意:使用$().load()而不是这里的一些人建议的$().ready()本身并没有什么错误。第二个更惯用,因为它执行得更早(让用户更快地与页面交互)。详情请参阅此链接:http://4loc.wordpress.com/2009/04/28/documentready-vs-windowload/
https://stackoverflow.com/questions/13238429
复制相似问题