Ich habe diese Knockout benutzerdefinierte Bindung, um ein Textfeld zu validieren, nur englische Buchstaben enthalten. Aber es scheint, als ob Javascript String.fromCharCode
falsche Werte zurückgibt.Javascript String.fromCharCode gibt falsche Werte zurück
Zum Beispiel des hebräische Buchstabe „ש“ kehrt als die englischen Buchstaben „A“ und die Zahl „1“ von dem rechten Ziffernblock hat kehrt als „a“ ...
Hier meine Knockout Bindung:
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' und' event.which' sind die gleiche Sache in jQuery - beste zu verwenden oder das andere. Die Verwendung beider kann verwirrend sein. –
Etwas, das uns helfen könnte, ist ein Kinderspiel :) –
Ich arbeite an einem jsfiddle für Sie :) –