2014-10-30 90 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

相关问题