选择触发器数组并使用对象中的数据

Selecting An Array of Triggers and using data from an object

本文关键字:对象 数据 触发器 数组 选择      更新时间:2023-09-26

我试图为我的用户创建一种简单的方法来选择使代码完全工作的触发键。

var triggers = {space:"32",enter:"13",tab:"9"};
var triggerKeys = ["space","enter"];
$('input').on('keypress',function(event) {
 var unicode= event.keyCode ? event.keyCode : event.which;
   if(unicode === triggers[triggerKeys]) {
       //code initiation here
   }

当然这行不通。关于我如何可能使它在triggerKeys的数组代码被启动,以及如果他们有一个以上的触发器的想法吗?

代码只适用于一个触发器。我应该对triggerKeys进行多个for循环吗?

不知道你想要什么,但我会这样做:

$('input').on('keypress',function(e) {
    switch (e.which) {
        case 32: //space
            console.log('space');
            break;
        case 13: //enter
            console.log('enter');
            break;
        case 9: //tab
            console.log('tab');
    }
});

使用一个数组作为另一个数组的键似乎从来没有为我工作?

如果你只是想检查一个键是否存在于一个数组中,存储keycodes:

var triggerKeys = [32, 13, 9];
$('input').on('keypress',function(e) {
    if ( $.inArray(e.which, triggerKeys) != -1 ) {
       // one of the triggerkeys was pressed
    }
});
编辑:

下面是你正在使用的地图的另一个例子,检查是否按下了触发键:

var triggerKeys = ["space","enter", "tab"];
var triggers    = {space: 32, enter: 13, tab: 9};
$('input').on('keypress',function(e) {
    var arr = $.map(triggerKeys, function(el, i) {return triggers[el];});
    if ( $.inArray( e.which, arr ) != -1 ) {
        console.log('trigger key pressed')
    }
});

小提琴

如果您希望基于变量unicode的值运行一些代码,那么只需检查集合中是否存在值就足够了。

一个简单的方法是为

集合使用一个数组
var triggerKeys = [32, 13];

则检查如下:

if (triggerKeys.indexOf(unicode) >= 0) {
    // ...
}

,但根据MDN文档indexOf可能不是在所有的浏览器。

或者你可以用:

模拟一个集合:
var triggerKeys = {32: true, 13: true};

然后直接写

if (unicode in triggerKeys) {
    // ...
}

编辑

为了提高代码的可读性,您可以继续使用定义键名和键代码的方法:

var triggers = {space: 32, enter: 13, tab: 9};
var triggerKeys = ["space", "enter"];
实际的触发键代码将从触发器 中计算出来。
var triggers = {space:"32",enter:"13",tab:"9"};
var triggerKeys = ["space", "enter"];
var triggerKeyCodes = {};
for (var i = 0; i < triggerKeys.length; i += 1) {
    triggerKeyCodes[triggers[triggerKeys[i]]] = true;
}

这使得triggerKeyCodes对象看起来像{32:true, 13:true}。然后你可以写:

if (unicode in triggerKeyCodes) {
    // ...
}

实时演示:http://jsbin.com/eqoyag/5/edit

既然你已经在使用jQuery了,adeneo的答案更好。即将到来的JavaScript版本将有一些很好的特性(理解、映射等),这将使原始JavaScript版本更干净。