另一个通过函数jQuery / JS传递变量的问题

时间:2010-06-07 01:36:21

标签: jquery

这是我的代码:

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

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

function lawyer(var1, var2, var3, var4)
{
    return function()
    {
        $(var1).bind('mouseenter', mouseOver(var2)).bind('mouseleave', mouseOut(var2)).click(
        function()
        {
            $(var1).unbind('mouseenter').unbind('mouseleave');
            $(var1).removeClass('off').addClass('on');

            $(var3).bind('mouseenter', mouseOver(var4)).bind('mouseleave', mouseOut(var4));
            $(var3).removeClass('on').addClass('off');

            $(var4).hide();
        });
    }
}

lawyer("#group", ".b", "#group2", ".l");

这不起作用的原因是什么?

它的工作原理是它隐藏了$(var4).hide();,但点击该对象似乎没有做任何事情。如果我从函数中取出代码并只复制/粘贴几次并更改目标,它就可以工作。 我没有看到它...任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

我不清楚你为什么要从lawyer()返回一个新功能。您对lawyer(...)的调用不会执行返回的函数。这可能是原因吗?

我常常使用一种技术来确定某些特定的代码是否完全运行,就是在那里插入alert("hi")或其他东西。如果您没有看到警报,则表示代码未运行。

答案 1 :(得分:0)

试试这个:

function lawyer(var1, var2, var3, var4) {
    return function() {
        $(var1)
            .bind('mouseenter', function() { mouseOver(var2); })
            .bind('mouseleave', function() { mouseOut(var2); })
            .click(function() {
                $(var1).unbind('mouseenter').unbind('mouseleave');
                $(var1).removeClass('off').addClass('on');

                $(var3).
                    bind('mouseenter', function() { mouseOver(var4) })
                    .bind('mouseleave', function() { mouseOut(var4) });
                $(var3).removeClass('on').addClass('off');

                $(var4).hide();
            });
    }
};

lawyer("#group", ".b", "#group2", ".l")();