Автоматическая смена раскладки
Добрый день.
Код: function Auto(str) { var search = new Array( "й","ц","у","к","е","н","г","ш","щ","з","х","ъ", "ф","ы","в","а","п","р","о","л","д","ж","э", "я","ч","с","м","и","т","ь","б","ю" ); var replace = new Array( "q","w","e","r","t","y","u","i","o","p","[","]", "a","s","d","f","g","h","j","k","l",";","'", "z","x","c","v","b","n","m",",","." ); return str.replace(search, replace); } $("#find").on('keypress',function(){ find_str = $("#find").val(); alert (Auto(find_str)); }); При нажатии любой клавиши в поле с id find код должен изменять английские буквы на русские, однако он этого не делает. Я не сделал перебор символов в строке find, искал инфу в гугле, но увы... Подскажите как дописать код. чтобы при вводе текста в поле find английские буквы автоматически сразу заменялись на русские? |
function Auto(str) { replacer = { "q":"й", "w":"ц" , "e":"у" , "r":"к" , "t":"е", "y":"н", "u":"г", "i":"ш", "o":"щ", "p":"з" , "[":"х" , "]":"ъ", "a":"ф", "s":"ы", "d":"в" , "f":"а" , "g":"п" , "h":"р" , "j":"о", "k":"л", "l":"д", ";":"ж" , "'":"э" , "z":"я", "x":"ч", "c":"с", "v":"м", "b":"и", "n":"т" , "m":"ь" , ",":"б" , ".":"ю" , "/":"." }; for(i=0; i < str.length; i++){ if( replacer[ str[i].toLowerCase() ] != undefined){ if(str[i] == str[i].toLowerCase()){ replace = replacer[ str[i].toLowerCase() ]; } else if(str[i] == str[i].toUpperCase()){ replace = replacer[ str[i].toLowerCase() ].toUpperCase(); } str = str.replace(str[i], replace); } } return str; } |
Amateur,
function Auto(str) { var search = new Array( "й","ц","у","к","е","н","г","ш","щ","з","х","ъ", "ф","ы","в","а","п","р","о","л","д","ж","э", "я","ч","с","м","и","т","ь","б","ю" ); var replace = new Array( "q","w","e","r","t","y","u","i","o","p","\\[","\\]", "a","s","d","f","g","h","j","k","l",";","'", "z","x","c","v","b","n","m",",","\\." ); for (var i = 0; i < replace.length; i++) { var reg = new RegExp(replace[i], 'mig'); str = str.replace(reg, function (a) { return a == a.toLowerCase() ? search[i] : search[i].toUpperCase(); }) } return str } alert (Auto("Ghbdtn!")); |
Мне кажется вариант ОлегА с объектом правильнее, но дальше там какая-то каша. А еще, по-моему, .toLowerCase и .toUpperCase - лишнее. Я бы сделал так:
function Auto( string ) { var replacer = { "Е": "T", "у": "e", "ы": "s", "е": "t" }; return string.replace(/[А-яЁё]/g, function ( x ){ return replacer[ x ]; }); }; alert( Auto( "Еуые" ) ); |
Sweet, да так было бы правильнее, но в объекте получается будут дублироваться буквы, а я так не хотел делать
|
вот конечный результат -
function auto_layout_keyboard( str ) { replacer = { "q":"й", "w":"ц", "e":"у", "r":"к", "t":"е", "y":"н", "u":"г", "i":"ш", "o":"щ", "p":"з", "[":"х", "]":"ъ", "a":"ф", "s":"ы", "d":"в", "f":"а", "g":"п", "h":"р", "j":"о", "k":"л", "l":"д", ";":"ж", "'":"э", "z":"я", "x":"ч", "c":"с", "v":"м", "b":"и", "n":"т", "m":"ь", ",":"б", ".":"ю", "/":"." }; return str.replace(/[A-z/,.;\'\]\[]/g, function ( x ){ return x == x.toLowerCase() ? replacer[ x ] : replacer[ x.toLowerCase() ].toUpperCase(); }); } |
Аналог meil.ru cкрипта http://hostjs-mybb2011.narod.ru/Rus_Lat.htm *Выделяем и жмём вторую кнопку справа
Вот тутошних пару тем http://javascript.ru/forum/dom-windo...-textarea.html http://javascript.ru/forum/misc/3018...-na-yutub.html |
А мне вот такое решение подсказали
var map = { 'q' : 'й', 'w' : 'ц', 'e' : 'у', 'r' : 'к', 't' : 'е', 'y' : 'н', 'u' : 'г', 'i' : 'ш', 'o' : 'щ', 'p' : 'з', '[' : 'х', ']' : 'ъ', 'a' : 'ф', 's' : 'ы', 'd' : 'в', 'f' : 'а', 'g' : 'п', 'h' : 'р', 'j' : 'о', 'k' : 'л', 'l' : 'д', ';' : 'ж', '\'' : 'э', 'z' : 'я', 'x' : 'ч', 'c' : 'с', 'v' : 'м', 'b' : 'и', 'n' : 'т', 'm' : 'ь', ',' : 'б', '.' : 'ю','Q' : 'Й', 'W' : 'Ц', 'E' : 'У', 'R' : 'К', 'T' : 'Е', 'Y' : 'Н', 'U' : 'Г', 'I' : 'Ш', 'O' : 'Щ', 'P' : 'З', '[' : 'Х', ']' : 'Ъ', 'A' : 'Ф', 'S' : 'Ы', 'D' : 'В', 'F' : 'А', 'G' : 'П', 'H' : 'Р', 'J' : 'О', 'K' : 'Л', 'L' : 'Д', ';' : 'Ж', '\'' : 'Э', 'Z' : '?', 'X' : 'ч', 'C' : 'С', 'V' : 'М', 'B' : 'И', 'N' : 'Т', 'M' : 'Ь', ',' : 'Б', '.' : 'Ю', }; $("#find").on('keyup', function () { var str = $("#find").val(); var r = ''; for (var i = 0; i < str.length; i++) { r += map[str.charAt(i)] || str.charAt(i); } $("#find").val(r); }); |
Amateur, ну это же тот же принцип, который и я предложил, просто он у вас срабатывает при наборе, но то же можно и с моей функцией сделать
|
Цитата:
|
Часовой пояс GMT +3, время: 07:48. |