【发布时间】:2015-05-11 07:12:25
【问题描述】:
我有这个 Knockout 自定义绑定来验证文本框是否只包含英文字母。但是,似乎 Javascript 的 String.fromCharCode 返回了错误的值。
例如,希伯来字母“ש”返回为英文字母“A”,右侧数字键盘中的数字“1”返回为“a”... p>
这是我的 Knockout 绑定:
var arrValidKeys = [8, 16, 17, 20, 35, 36, 37, 39, 46];
ko.bindingHandlers.validateText = {
init: function (element, valueAccessor) {
$(element).on("keydown", function (event) {
//Regex pattern: allow only (A to Z uppercase, a to z lowercase)
var englishAlphabet = /[A-Za-z]/g;
// Retrieving the key from the char code passed in event.which
var key = String.fromCharCode(event.which);
// keyCodes list: http://stackoverflow.com/a/3781360/114029
// check that the key is valid with the above Regex
valueAccessor()($(this).val());
return ((jQuery.inArray(event.keyCode, arrValidKeys) != -1) || englishAlphabet.test(key));
});
$(element).on("keyup", function (event) {
//Regex pattern: allow only (A to Z uppercase, a to z lowercase)
var englishAlphabet = /[A-Za-z]/g;
// Retrieving the key from the char code passed in event.which
var key = String.fromCharCode(event.which);
// keyCodes list: http://stackoverflow.com/a/3781360/114029
// check that the key is valid with the above Regex
valueAccessor()($(this).val());
return ((jQuery.inArray(event.keyCode, arrValidKeys) != -1) || englishAlphabet.test(key));
});
$(element).on("paste", function (e) {
var englishAlphabet = /[A-Za-z]/g;
if (englishAlphabet.test($(this).val()))
valueAccessor()($(this).val());
else
e.preventDefault();
});
}
};
【问题讨论】:
-
event.keyCode和event.which在 jQuery 中是一样的——最好使用其中一个。两者同时使用可能会造成混淆。 -
jsfiddle 可能对我们有所帮助:)
-
我正在为你做一个 jsfiddle :)
-
一个 jsfiddle,只为你 :) jsfiddle.net/2ma9nhn7
-
似乎对我很有效。我已经稍微更新了小提琴,因为
paste它不起作用:jsfiddle.net/2ma9nhn7/2 如果您点击event.which,event.which有什么价值?