0

jQueryでクリックイベントがあります。望ましい動作は、リンクがクリックされるたびに関数が実行されることです。ただし、実際の動作では、ページが読み込まれてから関数が 1 回だけ実行され、2 回目は実行されません。問題のあるコードは次のとおりです。ありがとう!

<!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

関数参照をに渡すことになっています.click。あなたの場合、実際の関数ではなく、関数の戻り値を渡しました。簡単に言えば、次のようにラップする必要がありますfunction(){}

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

jQueryドキュメントには、.click実際には関数を渡す必要があると記載されていますが、代わりにundefined例を渡しました。そのため、1回だけ実行されました。

于 2013-03-13T02:02:12.270 に答える
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 に答える