0

我在 jQuery 中有一个点击事件。所需的行为是每次单击链接时执行的函数。然而,实际的行为是页面加载,然后函数执行一次,再也不会执行。有问题的代码如下。谢谢!

<!DOCTYPE html>
<head>
<meta charset="utf-8">

<style>
#sub {
position:fixed;
z-index:999;
margin-top:180px;
margin-left:200px;
display:none;}
</style>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

<script>
function showdiv(divid) {
   $('.menu').hide();
   $('#'+divid).fadeToggle('slow');
};
$(document).ready(function(){
    $('a#opt1').click(showdiv('sub'));
    $('a#opt2').click(function(){$('.menu').hide();});
}); 
</script>
</head>
<body>
    <li><a id="opt1" href="#">Option1</a></li>
    <li><a id="opt2" href="#">Option2</a></li>
</ul>
<ul id="sub">
    <li><a href="#">Mission</a></li>
    <li><a href="#">Press</a></li>
</ul>

4

3 回答 3

1

$('a#opt1').click(showdiv('sub'));将立即运行该函数showdiv,将返回值设置为调用的值onclick(在这种情况下,什么都没有,因此您的点击处理程序似乎不起作用)。

您应该将其包装在一个匿名函数中。

$('a#opt1').click(function() { showdiv('sub') });
于 2013-03-13T01:56:54.790 回答
1

您需要将该函数包装在一个匿名函数中:

$('a#opt1').click(function() {
    showdiv('sub');
});
于 2013-03-13T01:58:29.817 回答
1

您应该将函数引用传递给.click. 在您的情况下,您传递了函数的返回值而不是实际函数。长话短说,你应该用function(){}

$('a#opt1').click(function(){
    showdiv('sub');
});

jQuery 文档实际上声明您必须传递.click一个函数,但您传递的undefined是您的示例。这就是为什么它只执行一次。

于 2013-03-13T02:02:12.270 回答