如果再次调用,函数中的mouseEvent会触发两次?

时间:2013-01-10 17:39:04

标签: javascript jquery function unbind

问题是我想在触发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");
        }
    );
}

该示例有两个对象,菜单和菜单关闭;当菜单按下时,显示ui框,并运行menu_function,它会触发警报测试消息。问题是当单击menu_close并关闭框并再次打开它时,警报测试将触发两次。我观察到div盒的关闭和再次打开的时间与函数的触发时间相同,我该如何解决?

如果我不想使用unbind,还有更好的解决方案吗?

1 个答案:

答案 0 :(得分:5)

您的menu_function()不只是触发警报测试消息 - 它正在为DOM中的所有内容添加一个实时点击监听器,该类具有触发测试警报的“select_li”类。这意味着每次单击#menu时,您都会向.select_li添加另一个侦听器 - 所以如果单击#menu 10x,每次单击.select_li时应该有10个侦听器。

如果你真的试图在点击#menu时显示警告,你的menu_function()应该只是这样:

function menu_function() {
    alert("test");
}