Jquery';s函数的动作从页面加载开始
我可以这样做:Jquery';s函数的动作从页面加载开始,jquery,Jquery,我可以这样做: $("#icon").live("hover", function() { var position = $(this).offset(); $('#popup').css({top: position.top - 10, left: position.left + 20}).toggle(); }, function() { $('#popup').toggle(); } );
$("#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();
}
);
页面加载上的错误位置为null
为什么在页面加载时运行show_popup()?那代码有什么问题吗?这是:
show_popup($(this))
是一个函数调用,因此在设置执行时将执行live
,您只需要其中的一个函数。当执行show\u popup($(this))
时,this
可能是window
并且window
没有偏移量,这意味着show\u popup
内的位置将为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\u popup
时,您必须始终提供适当的上下文,因此您将执行许多操作,例如show\u popup.call(some\u dom\u元素)
如果您想调用show\u popup
非jQuery回调的任何地方。在这种情况下,使用“element.”是无效的。使位置不可用。
如果你做了类似的事情
var position = $('#'+element).offset();
这可能有助于解决问题。注意:我为调用预先添加了一个“id”(#)选择器,而不是“class”(.)选择器。当然,您可以相应地编辑它