2010-11-15 277 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並在執行時測試該類的存在。測試它是否已設置並返回,或添加它,執行代碼,然後將其刪除。