2014-10-30 160 views
2

我正在尋找一種方法來禁用所有的密鑰,直到next()函數完成。禁用keydown,直到功能完成

我試過使用return false但它沒有工作。

nextDown = {}; 
    $(document).keydown(function(event){ 
     if(event.keyCode == '39'){ 
      if (nextDown['39'] == null) { 
       next(); 
       nextDown['39'] = true; 
      } 
     } 
    }); 
    $(document).keyup(function(event) { 
     nextDown[event.keyCode] = null; 
    }); 

有沒有辦法綁定虛假的​​然後函數完成解綁後?

+0

你如何定義未來*()*是否已經完成? – 2014-10-30 13:58:53

回答

2

怎麼樣聲明一個變量來這樣做。以下代碼是否可以解決您的問題?

nextDown = {}; 
var _lock = false; 
    $(document).keydown(function(event){ 
     if(event.keyCode == '39'){ 
      if (!_lock && nextDown['39'] == null) { 
       _lock = true; 
       next(); 
       nextDown['39'] = true; 
      } 
     } 
    }); 
    $(document).keyup(function(event) { 
     nextDown[event.keyCode] = null;  
    }); 


    function next() { 
     ... 
     _lock = false; 
    } 

如果沒有,請提供的jsfiddle例如

0

有一個非常簡單的方法來實現這一點。首先創建一個全局變量並將其設置爲0.然後在next()之前將cont設置爲1,並在next()完成後將其設置回0。這將允許您創建if語句,其中cont == 1將停止您的其他功能,cont == 0將允許它們運行。

var cont = 0; 

    $(document).keydown(function(event){ 
     if(event.keyCode == '39' && cont == 0){ 
      if (nextDown['39'] == null) { 
       cont = 1; 
       next(); 
       cont = 0; 
       nextDown['39'] = true; 
      } 
     } 
    }); 
    $(document).keyup(function(event) { 
     if (cont == 0) { 
      nextDown[event.keyCode] = null; 
     } 
    }); 
+0

這是一個很好的解決方案,但不是使用整型變量,而應該使用布爾型來提高可讀性。另外,我會將該變量重命名爲「DisableKeyStrokes」或更具描述性的內容。 – 2014-10-30 14:21:16

相關問題