Ввод только русских символов в input или при вводе текста в input преобразование латиницы в кириллицу
листинг JavaScript
// листинг JavaScript
// получение позиции курсора, в поле ввода - - -
// oInp - элемент DOM input
function fncGPCrs(oInp) { // GPCrs - Get position cursor
if ("selectionStart" in oInp &&
document.activeElement == oInp) {
iStr = oInp.selectionStart;
iEnd = oInp.selectionEnd;
return [iStr, iEnd];
}
return [-1, -1];
}
// - - -
// установка позиции курсора, в поле ввода - - -
// oInp - элемент DOM input
// iSPst - устанавливаемая позиция курсора
function fncSPCrs(oInp, iSPst) { // SPCrs - Set position cursor
if ("selectionStart" in oInp &&
document.activeElement == oInp) {
iStr = oInp.selectionStart;
iEnd = oInp.selectionEnd;
if(iStr <= iEnd) {
oInp.selectionStart = iSPst;
oInp.selectionEnd = iSPst;
return 1;
}
}
return -1;
}
// - - -
$(function() {
var mKNmb = { // mKNmb - map key number
'113':'1', '119':'2', '101':'3', '114':'4', '116':'5', '121':'6', '117':'7', '105':'8', '111':'9', '112':'10', '97':'11', '115':'12', '100':'13', '102':'14', '103':'15', '104':'16', '106':'17', '107':'18', '108':'19', '122':'20', '120':'21', '99':'22', '118':'23', '98':'24', '110':'25', '109':'26', '81':'27', '87':'28', '69':'29', '82':'30', '84':'31', '89':'32', '85':'33', '73':'34', '79':'35', '80':'36', '65':'37', '83':'38', '68':'39', '70':'40', '71':'41', '72':'42', '74':'43', '75':'44', '76':'45', '90':'46', '88':'47', '67':'48', '86':'49', '66':'50', '78':'51', '77':'52',
'91':'53', '93':'54', '59':'55', '39':'56', '44':'57', '46':'58', '123':'59', '125':'60', '58':'61', '34':'62', '60':'63', '62':'64'
};
var mNKey = { // mNKey - map number key
'1':'й', '2':'ц', '3':'у', '4':'к', '5':'е', '6':'н', '7':'г', '8':'ш', '9':'щ', '10':'з', '11':'ф', '12':'ы', '13':'в', '14':'а', '15':'п', '16':'р', '17':'о', '18':'л', '19':'д', '20':'я', '21':'ч', '22':'с', '23':'м', '24':'и', '25':'т', '26':'ь', '27':'Й', '28':'Ц', '29':'У', '30':'К', '31':'Е', '32':'Н', '33':'Г', '34':'Ш', '35':'Щ', '36':'З', '37':'Ф', '38':'Ы', '39':'В', '40':'А', '41':'П', '42':'Р', '43':'О', '44':'Л', '45':'Д', '46':'Я', '47':'Ч', '48':'С', '49':'М', '50':'И', '51':'Т', '52':'Ь',
'53':'х', '54':'ъ', '55':'ж', '56':'э', '57':'б', '58':'ю', '59':'Х', '60':'Ъ', '61':'Ж', '62':'Э', '63':'Б', '64':'Ю'
};
bEng = false;
$('input[name=sKrl]').off('keypress').on('keypress',
function(oEvn) {
iPCrs = fncGPCrs($(this).get(0));
// позиция курсора не определена
if(iPCrs[0] == -1)
return true;
sStr = $(this).val();
iSLng = sStr.length;
iKNmb = mKNmb[oEvn.which];
// обработка, символов в английской раскладке, которые расположены с буквами русской раскладки - - -
//(такие буквы как х ъ ж)
// если предыдущий символ был напечатан в английской раскладке, то предполагаем, что это буква
if(((bEng == true) && (iKNmb > 52)) ||
// исключение - если это первая буква в поле ввода, то предполагаем, что это буква
((iSLng == 0) && (iKNmb > 52))) {
// позиция курсора в конце поля ввода - - -
if(iSLng == iPCrs[0]) {
sStr += mNKey[iKNmb];
$(this).val(sStr);
// - - - позиция курсора не в конце поля ввода - - -
} else {
sStr = sStr.slice(0, iPCrs[0]) + mNKey[iKNmb] + sStr.slice(iPCrs[1]);
$(this).val(sStr);
fncSPCrs($(this).get(0), iPCrs[0] +1);
}
// - - -
return false;
// - - - обработка английской раскладки - - -
} else if((iKNmb > 0) && (iKNmb < 53)) {
// позиция курсора в конце поля ввода - - -
if(iSLng == iPCrs[0]) {
sStr += mNKey[iKNmb];
$(this).val(sStr);
// - - - позиция курсора не в конце поля ввода - - -
} else {
sStr = sStr.slice(0, iPCrs[0]) + mNKey[iKNmb] + sStr.slice(iPCrs[1]);
$(this).val(sStr);
fncSPCrs($(this).get(0), iPCrs[0] +1);
}
// - - -
bEng = true;
return false;
// - - - русская раскладка (обработка не требуется) - - -
} else {
bEng = false;
}
// - - -
});
});