gpt4 book ai didi

jquery - 将 e.which 插入数组不等于给定数组

转载 作者:行者123 更新时间:2023-12-01 07:21:01 25 4
gpt4 key购买 nike

你知道这里出了什么问题吗?无法弄清楚...它说 arr 不等于 [17, 67]

var key = function(keys, fn) {
var arr = [];
$(document).on({
keydown: function(e) {
arr.push(e.which);
if (arr === keys) {
fn();
}
},
keyup: function() {
arr = [];
}
});
};

// ctrl + c
key([17, 67], function() {
alert(true);
});

这是一个fiddle

更新

Cymen的答案它有效,但是如果您按 ctrl + a 然后按 ctrl + alt + a或者反之亦然,你必须触发第二个快捷方式两次才能工作,有什么想法吗?

fiddle .

var key = function(keys, fn) {
var arr = [];
$(document).on({
keydown: function(e) {
arr.push(e.which);
for (var i = 0; keys[i]; i++) {
if (arr[i] !== keys[i]) {
return false;
}
}
fn(e);
arr = [];
},
keyup: function() {
arr = [];
}
});
};

// ctrl + c
key([17, 67], function() {
alert(true);
});

// ctrl + alt + c
key([17, 18, 67], function() {
alert('ctrl+alt+c');
});

最佳答案

您不能使用===来检查数组的内容是否相等。使用 JavaScript 控制台检查一下:

[17, 35] === [17, 35]
false

a = [17, 35]
[17, 35]
a === a
true

因此,数组上的 === 正在检查引用而不是值。您可以使用其他内容(例如下划线)进行比较,或者如果这是某种挑战,您可以自己编写一个。或者,由于您只比较两个元素,请执行以下操作:

var key = function(keys, fn) {
var arr = [];
$(document).on({
keydown: function(e) {
arr.push(e.which);
if (arr[0] === keys[0] && arr[1] === keys[1]) {
fn();
arr = []; // added this to avoid buggyness
}
console.log(arr);
console.log(keys);
},
keyup: function() {
arr = [];
}
});
};

// ctrl + c
key([17, 67], function() {
alert(true);
});​

http://jsfiddle.net/9LbsD/

对于两个以上的键,例如 CTRL+ALT+C

You need an array comparison that works for variable lengths like this one:

var equalArrays = function(array1, array2) {
if (array1.length != array2.length) {
return false;
}
for (var i=0; i < array1.length; i++) {
if (array1[i] !== array2[i]) {
return false;
}
}
return true;
}

var key = function(keys, fn) {
var arr = [];
$(document).on({
keydown: function(e) {
arr.push(e.which);
console.log('arr', arr, 'keys', keys, 'match', equalArrays(arr, keys));
if (equalArrays(arr, keys)) {
fn();
arr = [];
}
console.log(arr);
console.log(keys);
},
keyup: function() {
arr = [];
}
});
};

// ctrl + c
key([17, 67], function() {
alert(true);
});

// ctrl + alt + c
key([17, 18, 67], function() {
alert('ctrl+alt+c');
});

http://jsfiddle.net/WZLut/

错误较少的方法

我们需要跟踪按下了哪些键,但是单个键只能在一个组合中按下一次(我假设),并且在键盘上我们应该只删除向上的键而不是所有键。所以这是一个可行的方法:

var equalArrays = function(array1, array2) {
return _.isEqual(array1, array2);
}

var key = function(keys, fn) {
var arr = [];
$(document).on({
keydown: function(e) {
arr = _.without(arr, e.which);
arr.push(e.which);
if (equalArrays(arr, keys)) {
fn();
}
},
keyup: function(e) {
arr = _.without(arr, e.which);
arr = _.uniq(arr);
}
});
};

// ctrl + c
key([17, 67], function() {
alert('ctrl+c');
});

// ctrl + alt + c
key([17, 18, 67], function() {
alert('ctrl+alt+c');
});

http://jsfiddle.net/BgQUA/

关于jquery - 将 e.which 插入数组不等于给定数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13672698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com