首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在jQuery中通过bind传递变量似乎不起作用

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

Stack Overflow用户
提问于 2010-06-07 08:20:19
回答 2查看 789关注 0票数 1

下面是我的代码:

代码语言:javascript
复制
function mouseOver()
{
    $(".beaver").fadeIn(100);

}

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

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

但是为什么这个不起作用呢?

代码语言:javascript
复制
function mouseOver(variable)
{
    $(variable).fadeIn(100);

}

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

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

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-06-07 08:24:27

这是正确的;您正在调用mouseOver并期望它返回一个绑定到事件的函数。不过,要让它真正做到这一点,您可以使用以下代码:

代码语言:javascript
复制
function mouseOver(variable) {
    return function() {
        $(variable).fadeIn(100);
    };
}
function mouseOut(variable) {
    return function() {
        $(variable).fadeOut(100);
    };
}
票数 6
EN

Stack Overflow用户

发布于 2010-06-07 09:48:43

icktoofay的技术称为闭包。关于闭包here的讨论非常全面。我发现它们对于使用window.setTimeout()安排事件非常有用。它们基本上允许你加载一个有前置条件的函数对象,然后不带参数地计算它。相当漂亮。

然而,尽管闭包很新颖,但通常可以避免这种情况。例如,如果.beaver#group_beaver的子代,那么使用下面这样的代码会更好

代码语言:javascript
复制
function mouseOver()
{
    $(this).children().fadeIn(100);
}

在事件处理程序中,jQuery确保this总是引用触发事件的元素,所以基本上可以免费获得一个参数。考虑到示例的简单性,我猜闭包是不必要的。

您还可以执行以下操作:

代码语言:javascript
复制
$('group_beaver').mouseenter(function() {
    $(variable).fadeIn(100);
});

这实际上只是一种伪装的闭合。这和写东西一样:

代码语言:javascript
复制
function mouseOver(variable) {
    return function() {
        $(variable).fadeIn(100);
    }
};

$('#group_beaver').mouseenter(mouseOver('.beaver'));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2986475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档