1

简而言之,这有效-> http://jsfiddle.net/mammolastan/ccafu/3/

这不是-> http://jsfiddle.net/mammolastan/2mZVu/

我正在使用 jQuery 悬停。

在示例 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 仅在此处更改 -->

$("li").hover(append('some string'),remove);
4

1 回答 1

1

正如adeno所说,添加括号会立即执行该功能。

传递参数的一种方法是在 HTML 元素上添加一个属性

<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 个参数:目标和字符串。您的函数将如下所示:

function append(e,a)
{
    $(e).append("<span>"+a+"</span>");
}

这是小提琴的例子:http: //jsfiddle.net/2mZVu/7/

那是说,我真的不喜欢第二种方法,因为代码不干净。我不知道优化,但我很确定第一种方法更快。

欢呼

于 2013-04-27T19:54:39.863 回答