简而言之, 这工作 - > http://jsfiddle.net/mammolastan/ccafu/3/
这不 - > http://jsfiddle.net/mammolastan/2mZVu/
我正在使用jQuery hover。
在示例1中,函数append(e)仅在鼠标悬停时运行,这就是我想要的。
但是,如例2所示,当我尝试将参数传递给函数append(e)时,append(e)会在页面加载时立即运行,并且脚本不起作用。
我试过寻找jquery悬停问题的其他例子,但我找不到任何调用现有函数的例子,我只能找到在悬停调用中定义函数的例子。
Ex1是 - >
<html>
<ul>
<li>Milk</li>
<li>Bread</li>
<li class='fade'>Chips</li>
<li class='fade'>Socks</li>
</ul>
<script>
$("li").hover(append,remove);
$("li.fade").hover(flash);
function append(e)
{
alert(e);
$(this).append($("<span> ***</span>"));
}
function remove(e)
{
$(this).find("span:last").remove();
}
function flash(e)
{ $(this).fadeOut(100);$(this).fadeIn(500);
}
</script>
Ex 2仅在此处更改 - &gt;
$("li").hover(append('some string'),remove);
答案 0 :(得分:1)
正如adeneo所说,添加括号会立即执行该功能。
传递参数的一种方法是在HTML元素上添加一个attribut
<li text="some text" >Milk</li>
然后添加你的听众
$("li").hover(append, remove);
您的追加功能将如下所示
function append()
{
node = $(this);
node.append("<span>"+node.attr('text')+"</span>");
}
以下是小提琴示例:http://jsfiddle.net/2mZVu/7/
另一种方法是调用匿名函数。您可以使用字符串传递currentTarget
元素:
$("li").hover(function(e){append(e.currentTarget, 'somestring')}, remove);
然后,你的函数中将有2个参数:target和string。您的功能将如下所示:
function append(e,a)
{
$(e).append("<span>"+a+"</span>");
}
以下是小提琴示例:http://jsfiddle.net/2mZVu/7/
那个beign说,我真的不喜欢第二种方法,因为代码不干净。我不知道优化,但我很确定第一种方法更快。
啦啦队