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”(.)选择器。当然,您可以相应地编辑它