2010-11-15 236 views
5

我有一个脚本,我正在开发创建一个滑动按钮类型效果。五个div位于彼此旁边,每个链接都有一个链接。当其中一个DIVS被点击时,关联的内容会被扩展,其余的Div将被关闭。防止Javascript被执行两次

问题是,如果用户在加载时点击Div两次,或者快速连续单击另一个Div,则会出现裂缝。

我想知道是否可以只允许查询执行一次,并等到完成而不是排队。

这里是我当前的代码,如果是垃圾随意对我如何能更好地对此发表评论......我不是最好的,在使用Javascript/jQuery的:P提前

function mnuClick(x){ 
    //Reset all elements 
    if($('#'+x).width()!=369){ 
     $('.menu .menu_Graphic').fadeOut(300); 
     $('.menu_left .menu_Graphic').fadeOut(300); 
     $('.menu_right .menu_Graphic').fadeOut(300); 
     $('.menu').animate({width: "76px"},500); 
     $('.menu_left').animate({width: "76px"},500); 
     $('.menu_right').animate({width: "76px"},500); 
    } 
     var ElementId = '#' + x; 

     $(ElementId).animate({ 
      width: 369 + "px" 
     },500, function(){ 
      $(ElementId + ' .menu_Graphic').fadeIn(300); 
     }); 
} 

谢谢, 克里斯。

回答

9

您需要一个“isRunning”标志。在开始之前检查它。在开始序列时将其设置,并在结束时将其清除。

+1

+1正如我刚才所说的,只需拥有一个跟踪事件是否运行的变量,并在开始处理之前对其进行初始化(以便禁用所有其他事件)。 – Jakub 2010-11-15 15:35:20

+0

非常感谢。伟大的解决方案,但很简单 – Chris 2010-11-16 10:17:14

3
(function() { 
var mutex = false; 

    function mnuClick(x){ 
     if (!mutex) { 
      mutex = !mutex; 

      /* all code here ... */ 

      mutex = !mutex; /* this statement should go into animation callback */ 
     } 

    } 

})(); 

通过可变十个分量的状态,所以你不能点击超过一次,直到代码完全执行

0

您可以创建一个无形的马斯和maskout(如灯箱等后台)或禁用点击,直到动画完成。

1

您可以在事件启动时拔掉onClick事件处理程序(mnuClick),以有效禁用调用mnuClick两次,但一定要在事件结束时恢复它。

1

快速回答:使用.addClass和.removeClass并在执行时测试该类的存在。测试它是否已设置并返回,或添加它,执行代码,然后将其删除。