我正在尝试为用户创建一种简单的方法来选择使代码完全工作的触发器键。到目前为止,我有这个。
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呢?
代码仅适用于一个触发器。我应该将triggerKeys循环多个吗?
答案 0 :(得分:1)
不确定你在追求什么,但我会做这样的事情:
$('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');
}
});
因为使用数组作为另一个数组的键似乎永远不适合我吗?
如果您只是想检查数组中是否存在密钥,请存储密钥代码:
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')
}
});
答案 1 :(得分:0)
如果您希望根据变量unicode
的值运行一些代码,那么只需检查集合中是否存在值即可。
一种简单的方法是为您的集合使用数组
var triggerKeys = [32, 13];
然后检查如下:
if (triggerKeys.indexOf(unicode) >= 0) {
// ...
}
但根据the MDN docs 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版本更加清晰。