通过bind在jQuery中传递变量似乎不起作用

时间:2010-06-07 00:20:19

标签: jquery

这是我的代码确实有效:

function mouseOver()
{
    $(".beaver").fadeIn(100);

}

function mouseOut()
{
    $(".beaver").fadeOut(100);
}

$("#group_beaver").bind('mouseenter', mouseOver).bind('mouseleave', mouseOut);

但为什么这不起作用?

function mouseOver(variable)
{
    $(variable).fadeIn(100);

}

function mouseOut(variable)
{
    $(variable).fadeOut(100);
}

$("#group_beaver").bind('mouseenter', mouseOver('.beaver')).bind('mouseleave', mouseOut('.beaver'));

2 个答案:

答案 0 :(得分:6)

这是正确的;你正在调用mouseOver并期望它返回一个绑定到事件的函数。但是,要实际执行此操作,您可以使用以下代码:

function mouseOver(variable) {
    return function() {
        $(variable).fadeIn(100);
    };
}
function mouseOut(variable) {
    return function() {
        $(variable).fadeOut(100);
    };
}

答案 1 :(得分:1)

icktoofay的技术称为闭包。关于闭包here有一个非常全面的讨论。我发现它们对于使用window.setTimeout()调度事件非常有用。它们基本上允许您使用前置条件加载函数对象,然后使用无参数进行评估。非常漂亮。

然而,对于他们所有的新奇事物,通常可以避免关闭。例如,如果.beaver#group_beaver的孩子,那么最好用

之类的东西
function mouseOver()
{
    $(this).children().fadeIn(100);
}

在事件处理程序中,jQuery确保this始终引用触发事件的元素,因此您基本上可以免费获得参数。鉴于您的示例简单,我猜测闭包不是必需的。

你也可以这样做:

$('group_beaver').mouseenter(function() {
    $(variable).fadeIn(100);
});

这实际上只是伪装的封闭。它和写作一样:

function mouseOver(variable) {
    return function() {
        $(variable).fadeIn(100);
    }
};

$('#group_beaver').mouseenter(mouseOver('.beaver'));