【发布时间】:2015-03-12 14:28:26
【问题描述】:
我有用拉丁字符替换西里尔字母用户输入的 jQuery 代码。当用户输入不是太快(每分钟 60-70 个字符)时,这项工作正常,但当用户输入速度比这快时,它混合了西里尔字符和拉丁字符,可能是因为无法及时捕获 keyup 事件。我该如何解决这个问题?
$("input[name*=Name]").not("input[name*=Main]").keyup(function (e) {
if (e.keyCode === 8 || e.keyCode === 46 || e.keyCode === 9 || e.keyCode === 13 || e.keyCode === 17 || e.keyCode === 18 || e.keyCode === 37 || e.keyCode === 38 || e.keyCode === 39 || e.keyCode === 40 || e.keyCode === 16 || e.keyCode === 20) {
return false;
} else {
var englishchars = ["a", "b", "v", "g", "d", "e", "yo", "zh", "z", "i", "yi", "k", "l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "kh", "c", "ch", "sh", "shch", "i", "e", "yu", "ya", ""];
var slavicchars = ["а", "б", "в", "г", "д", "е", "ё", "ж", "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ", "ы", "э", "ю", "я", "ь"];
var verified = String.fromCharCode(e.wich).match(/[^а-яё]/);
if (verified) {
e.preventDefault();
var lastchar = this.value.length > 1 ? this.value.substr(-1) : this.value;
var russiancharindex = jQuery.inArray(lastchar, slavicchars);
if (russiancharindex > 0) {
var englishcharindex = englishchars[russiancharindex];
this.value = this.value.replace(lastchar, englishcharindex);
} else {
return false;
}
} else {
return false;
}
}
});
【问题讨论】:
标签: javascript jquery user-input