Kub key
Разделы
Web-разработка
тестовая
Windows (Администрирование)
Ввод только русских символов в 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; } // - - - }); });