jquery hover:使用函数并传递参数使其立即运行

时间:2013-04-27 18:21:24

标签: jquery jquery-hover

简而言之, 这工作 - > 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);

1 个答案:

答案 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说,我真的不喜欢第二种方法,因为代码不干净。我不知道优化,但我很确定第一种方法更快。

啦啦队