这是我的代码确实有效:
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'));
答案 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'));