动作的Jquery函数从页面加载开始

时间:2012-03-10 06:40:32

标签: jquery

我可以这样做:

$("#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()?这段代码出了什么问题?

2 个答案:

答案 0 :(得分:0)

此:

show_popup($(this))

是一个函数调用,因此当live被设置为执行时,它将被执行,你只需要一个函数。执行show_popup($(this))后,this可能会windowwindow没有偏移量,这意味着positionshow_popupnull将是show_popup,这是您的错误消息。另请注意,此方法尝试将undefined的返回值(将为$("#icon").live("hover", function() { show_popup($(this)) }, function() { $('#popup').toggle(); } ); )绑定为jQuery回调,这显然不是您的意图。

你想要这样的东西:

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.call(some_dom_element)时提供适当的上下文,这样如果你想在任何地方调用show_popup,你就会做很多事情,比如{{1}}是一个jQuery回调。

答案 1 :(得分:0)

使用“元素”。在这种情况下无效。使职位无法使用。 如果你做了像

这样的事情
var position = $('#'+element).offset();

这可能有助于解决问题。注意我在调用之前添加了一个“id”(#)选择器而不是“class”(。)选择器,当然你可以相应地编辑它