通过javascript禁用和启用箭头键

时间:2011-09-19 07:21:25

标签: javascript jquery

我有一个场景,首先我需要禁用键盘箭头键,然后再进行一些处理启用它,为此我写了这个jquery函数

function DisableArrowKeys() {
        var ar = new Array(37, 38, 39, 40);
        $(document).keydown(function(e) {
            var key = e.which;
            if ($.inArray(key, ar) > -1) {
                e.preventDefault();
                return false; 
           }
            return true;
        });
    }

这个功能可以禁用箭头键,经过一些处理我需要启用箭头键这个我在下面的函数中做了更改

function EnableArrowKeys() {
        var ar = new Array(37, 38, 39, 40);
        $(document).keydown(function(e) {
            var key = e.which;
            if ($.inArray(key, ar) > -1) {              
                return true;
            }           
        });
    }

但是当我们调用该函数时,它不会启用箭头键。

3 个答案:

答案 0 :(得分:3)

您需要保留对禁用功能的引用,并在准备好再次接受箭头键时取消绑定。类似的东西:

var ar = new Array(37, 38, 39, 40);
var disableArrowKeys = function(e) {
    if ($.inArray(e.keyCode, ar)>=0) {
        e.preventDefault();
    }
}

$(document).keydown(disableArrowKeys);

// then when you are ready to enable, unbind the function...
$(document).unbind('keydown', disableArrowKeys);

答案 1 :(得分:0)

第二个处理程序(附在EnableArrowKeys函数中)不会取消第一个处理程序。 jQuery事件处理程序被链接:

If there are multiple handlers registered, they will always execute in the order in which they were bound.

因此,在EnableArrowKeys函数中使用unbind函数,而不是添加另一个处理程序。

function EnableArrowKeys() {
    $(document).unbind('keydown');
}

答案 2 :(得分:0)

你可以这样做:

var DisableArrowKeys = function(e){
    if ($.inArray(e.which, ar) > -1) {
        e.preventDefault();
        return false; 
    }
    return true;
}
$(document).bind("keydown", DisableArrowKeys);

然后取消绑定:

$(document).unbind("keydown", DisableArrowKeys);