选择触发器数组并使用对象中的数据
Selecting An Array of Triggers and using data from an object
我试图为我的用户创建一种简单的方法来选择使代码完全工作的触发键。
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版本更干净。
相关文章:
- 将嵌套对象数据添加到窗体中
- 使用javascript更改嵌套对象数据
- 如何将状态对象/数据传递给(异步)ajax 回调
- 如何使用HTML5中的sessionStorage概念在Javascript中打印对象数据
- 如何在express中使用socket.io发布多个对象数据
- 如何在 Javascript 中将函数绑定到对象数据成员的更改
- 在$.ajax调用中将附加数据添加到jQuery包装的对象数据中
- 当点击处理程序添加到谷歌地图圆圈标记时,无法访问对象数据
- JavaScript对象数据和数组
- 访问主数组内的数组中的对象数据
- 角度.js从NG重复更新对象数据
- HTML 对象数据文件(如果未找到)
- 设置对象数据结构数组属性
- Ajax 请求不发送我的对象数据
- 获取对象数据的浅拷贝的最快方法是什么
- 如何访问对象的键值?希望从对象数据填充表
- JSON.parse 似乎不解析对象数据
- 在 android WebView 中的 java 和 javascript 之间共享对象(数据)
- 选择 JSON 对象数据表元素以列出其所有元素
- 当响应 JSON 对象数据计数为零时,AJAX 成功回调函数重定向到错误回调