4
4

4 回答 4

7

只需将代码放入数组中,然后您可以简单地检查值是否在数组中。由于您使用的是 jQuery,因此您已经有了inArray()执行此操作的方法。

var keycodes = [13, 16, 17, 18, 19]; //and so on

//if the keycode is not found in the array, the result will be -1
if ($.inArray(e.keyCode, keycodes) === -1) { 
    $(this).addClass(fill);
}
于 2012-05-12T08:05:21.337 回答
7

您可以创建不想处理的键的“映射” - 映射查找应该介于O(1)和之间O(log n),具体取决于实现。

var specialKeys = {
    13: 1, // Enter
    16: 1, // Shift
    ...
    224: 1 // Cmd/FF
};

inputs.keydown(function (e) {
    if (e.keyCode in specialKeys) return;
    $(this).addClass(fill);
});

或者,由于您的“键”都是整数,您可以填充一个数组,其中索引是键码值。

根据@bažmegakapa 的建议,编辑删除了字符串

于 2012-05-12T08:05:34.580 回答
2

你所拥有的很好。这很清楚,并且会得到相当有效的处理。或者,您可以这样做Array#indexOf

var list1 = [
        13,    //Enter
        16,    //Shift
        17,    //Ctrl
        18,    //Alt
        19,    //Pause/Break
        20,    //Caps Lock
        27,    //Escape
        35,    //End
        36,    //Home
        37,    //Left
        38,    //Up
        39,    //Right
        40     //Down
];
var list2 = [
        91,    //Safari, Chrome
        93,    //Safari, Chrome
        224    //Firefox
];
inputs.keydown(function (e) {
    if (list1.indexOf(e.keyCode) !== -1) {
        // ...
    }
    else if (list2.indexOf(e.keyCode) !== -1) {
        // ...
    }
    else {
        $(this).addClass(fill);
    }
});

但是,如果您丢失了注释,只会减少“行”代码,并且注释(对我而言)似乎很重要。

请注意,一些相当旧的浏览器不会有Array#indexOf,因此您可能必须对其进行填充(这很容易做到)。或者jQuery.inArray改用,因为您使用的是 jQuery。

于 2012-05-12T08:07:11.560 回答
0

恕我直言,使用您指出的代码更清楚,但为方便起见,您可以使用案例内的条件......

case (condition):
//code
break;

就个人而言,我会将所有可能的匹配项放入一个数组中,并使用phpjs.org中的in_array()来检查要测试的值是否存在。

于 2012-05-12T08:09:55.567 回答