我可以这样做:
$("#icon").live("hover",
function()
{
var position = $(this).offset();
$('#popup').css({top: position.top - 10, left: position.left + 20}).toggle();
},
function()
{
$('#popup').toggle();
}
);但这一点:
function show_popup(element)
{
var position = element.offset();
$('#popup').css({top: position.top - 10, left: position.left + 20}).toggle();
}
$("#icon").live("hover",
show_popup($(this)),
function()
{
$('#popup').toggle();
}
);页面加载时出现错误position is null。
为什么它在页面加载时运行show_popup()?这段代码有什么问题?
发布于 2012-03-10 14:44:48
这一点:
show_popup($(this))是一个函数调用,所以当live被设置为执行时,它将被执行,你只想在里面有一个函数。当show_popup($(this))被执行时,this可能是window,而window没有偏移量,这意味着你在show_popup中的position将是null,这就是你的错误消息。还要注意,这种方法试图将show_popup (将是undefined)的返回值绑定为jQuery回调,这显然不是您的意图。
你想要这样的东西:
$("#icon").live("hover",
function() { show_popup($(this)) },
function()
{
$('#popup').toggle();
}
);或者是这样的:
function show_popup()
{
var position = $(this).offset();
$('#popup').css({top: position.top - 10, left: position.left + 20}).toggle();
}
$("#icon").live("hover",
show_popup,
function()
{
$('#popup').toggle();
}
);在这种情况下,在调用show_popup时总是需要提供适当的上下文,所以如果您想要调用show_popup anywhere而不是jQuery回调,那么您需要做很多像show_popup.call(some_dom_element)这样的事情。
发布于 2012-03-10 14:46:26
“element”的用法。在这种情况下是无效的。使位置变得不可用。如果你做了像这样的事情
var position = $('#'+element).offset();这可能有助于解决这个问题。注意:我在前面加上了一个"id“(#)选择器,而不是一个"class”(.)选择器,当然你也可以对其进行相应的编辑
https://stackoverflow.com/questions/9644480
复制相似问题