0

問題は、mouseevent関数がトリガーされたときに一度だけ起動したいということです。

 $(document).ready(function() {
     $("#menu").click(function(){
         $('#menu_div').show();
         menu_function();
     });


     $("#menu_close").click(function(){
         $('#menu_div').hide();
     });
 });

function menu_function(){
    $(".select_li").live(
        "click",
        function() {
            alert("test");
        }
    );
}

この例には、menuとmenucloseの2つのオブジェクトがあります。メニューを押すと、UIボックスが表示され、menu_functionを実行します。これにより、アラートテストメッセージが表示されます。問題は、menu_closeをクリックしてボックスを閉じ、もう一度開くと、アラートテストが2回実行されることです。divボックスが閉じて再び開く時間が関数の起動時間と同じであることがわかりましたが、どうすれば修正できますか?

unbindを使用したくない場合、より良い解決策はありますか?

4

1 に答える 1

5

menu_function()は、アラートテストメッセージを発するだけではありません。テストアラートを発する「select_li」のクラスを持つDOM内のすべてにライブクリックリスナーを追加します。これは、#menuをクリックするたびに、.select_liに別のリスナーを追加することを意味します。したがって、#menu 10xをクリックすると、.select_liをクリックするたびに10個のリスナーが必要になります。

#menuをクリックしたときに本当にアラートを表示しようとしている場合、menu_function()は次のようになります。

function menu_function() {
    alert("test");
}
于 2013-01-10T17:44:47.437 に答える