我的代码类似于:
$("#some-input").keyup(function (event) {
var availableKeys = [".", ",", ";"];
var key = String.fromCharCode(event.which);
if (availableKeys.indexOf(key) != -1) {
alert("Derp");
}
});
然而它并没有像我预期的那样奏效。 event.which
/ fromCharCode
组合在数字或字母(大写字母)上正常工作,这是正确的行为,因为(我认为)事件键码与字符集条目不同。
除了直接指定用于比较的密钥代码(保持字符数组是优先级)之外,还有其他解决方法吗?
答案 0 :(得分:4)
尝试更改阵列以包含您要检查的键的键码:
$("#some-input").keyup(function(event) {
var availableKeys = [190, 188, 59]; // ".", ",", ";"
if (availableKeys.indexOf(event.which) != -1) {
alert("Derp");
}
});
Here's a full list of keycodes
修改强>
经过一些调查后看来你的方法应该可行,但String.fromCharCode
的实现是有缺陷的 - 至少对于符号键是这样。按下.
会返回正确的keyCode 190,当你通过fromCharCode运行时,你会得到字符串¾
。 [
和#
等其他键表现出类似的行为。我认为这是由于国际化,也许其他人可以确认。
答案 1 :(得分:3)
您可以使用keypress
代替。像
$("#some-input").bind('keypress', function(e) {
var availableKeys = [".", ",", ";"];
if(availableKeys.indexOf( String.fromCharCode( e.which ) ) > -1 ) {
alert('Derp');
}
});
答案 2 :(得分:1)
在我看来,您应该尝试使用charCodeAt
在比较时将密钥转换为密钥代码。例如:
alert (".".charCodeAt(0)); // alerts 46
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/charCodeAt
答案 3 :(得分:0)
这很可能是与获取密钥/字符代码的方式有关的问题。尝试获取char / key代码,如:
var code = (event.charCode != 0) ? event.charCode : (event.keyCode != 0 ? event.keyCode : event.which);
var key = String.fromCharCode(code);
在代码的任何其他部分找不到任何问题。
答案 4 :(得分:0)
这不起作用,因为您在'
中使用key
作为separator
之一,并且在数组中也使用char .
,因此它会使程序混淆,否则它会为{{1}工作}和;
。
[“。”,“,”,“;”]。它考虑了4个不同的元素。
使用belwo代码:
$("#some-input").keypress(function (event) {
var availableKeys = ",.;";
var key = String.fromCharCode(event.which);
if (availableKeys.indexOf(key) != -1) {
alert("Derp");
}
});
答案 5 :(得分:0)
您可以使用underscore.js:
$("#some-input").bind('keypress', function(event) {
var aKeys = [13, 32];
if ( _.contains(aKeys, event.which) ) {
console.log("char :" + event.which);
}
});