2013-01-10 44 views
0

问题是我想在触发mouseevent函数时只触发一次,例如,如果再次调用,函数中的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 box的时间再次打开和关闭的时间与函数的fire time是一样的,我该如何解决它?

如果我不想使用解除绑定,有没有更好的解决方案?

+0

加入相关的HTML代码,或建立一个最小[的jsfiddle] (http://jsfiddle.net/),这表明你的问题将大大帮助那些试图帮助你的人。 – Zack

+1

我通常会降低包含未格式化代码的问题,但这次不会 - 请考虑在将来的问题中缩进代码。这让他们更容易阅读帮助你的人! – halfer

+0

感谢不downvoting,这个问题是由杰克 – user782104

回答

5

您的menu_function()不仅仅是发出警报测试消息 - 它将为DOM中的所有内容添加一个实时点击监听器,该监听器有一个可激发测试警报的“select_li”类。这意味着每次点击#menu时,您都会将另一个监听器添加到.select_li - 因此,如果您单击#menu 10x,则每次点击.select_li时应该有10个监听器。

如果你真正想当你点击#menu只是显示一个警告,您的菜单_()只应是这样的:

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

杰克解释。 –

+0

感谢您的回答,因为我需要使用一个按钮来打开div菜单,并且在菜单上我需要按一个按钮来提醒测试。这意味着我需要上一堂课? – user782104

+0

请澄清你的意思是什么问题 - 我不确定你在问什么?如果它与上述问题无关或完全不同,可以考虑开一个新问题。如果它与上面的问题一样,请清楚地说明你正在做什么,并提供一个jsfiddle表示,如果它适用的话。 – Jack