禁用keydown直到功能完成

时间:2014-10-30 13:50:07

标签: jquery

我正在寻找一种方法来禁用所有密钥代码,直到next()功能完成。

我尝试使用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;
    });

在函数完成解绑后,有没有办法将{false}绑定到keydown

3 个答案:

答案 0 :(得分: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示例

答案 1 :(得分: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;
        }
    });

答案 2 :(得分:0)

你必须使用回调来做你想做的事。

http://api.jquery.com/jquery.callbacks/