我做错了什么?调用函数后,似乎没有清除数组。
如果先按 ctrl + c 然后按 ctrl + alt + c ,则不会调用第二个功能(仅当您再按一次时)。
var key = function (keys, fn) {
var arr = [];
$(document).on({
keydown: function (e) {
arr.push(e.which);
if (arr.join(', ') === keys) {
fn(e);
arr = [];
}
},
keyup: function (e) {
arr = [];
}
});
};
// ctrl + c
key('17, 67', function (e) {
alert('ctrl+c');
});
// ctrl + alt + c
key('17, 18, 67', function () {
alert('ctrl+alt+c');
});
这是 fiddle 。
答案 0 :(得分:2)
编辑:此代码显示效果不佳。它不会看到 Ctrl + C 和 Cltrl + C + V 之间的区别!
试试这段代码:
var key = function (keys, fn) {
$(document).on({
keydown: function (e) {
var arr = [];
if(e.ctrlKey)
arr.push("17");
if(e.altKey)
arr.push("18");
arr.push(e.which);
if (arr.join(', ') === keys) {
fn(e);
}
}
});
};
// ctrl + c
key('17, 67', function (e) {
alert('ctrl+c');
});
// ctrl + alt + d
key('17, 18, 68', function () {
alert('ctrl+alt+c');
});
您可以在keydown事件发生时检查是否按下了按键,而不是将按键收集到全局数组中。这对我很好:http://fiddle.jshell.net/27WGw/2/ (注意我将Ctrl + Alt + c更改为Ctrl + Alt + d,因为第一个是我机器上的全局热键)
答案 1 :(得分:2)
代码中的问题不是数组。
您没有调用您的密钥,因为您在看到警报窗口时释放密钥
检查在此处工作的相同代码:http://jsfiddle.net/WucCQ/1/ - 观看控制台日志
var key = function (keys, fn) {
var arr = [];
$(document).on({
keydown: function (e) {
arr.push(e.which);
if (arr.join(', ') === keys) {
fn(e);
arr = [];
}
},
keyup: function (e) {
arr = [];
}
});
};
// ctrl + c
key('17, 67', function (e) {
console.log('ctrl+c');
});
// ctrl + alt + c
key('17, 18, 67', function () {
console.log('ctrl+alt+c');
});