Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Автоматическая смена раскладки (https://javascript.ru/forum/jquery/34739-avtomaticheskaya-smena-raskladki.html)

Amateur 17.01.2013 06:43

Автоматическая смена раскладки
 
Добрый день.

Код:
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 английские буквы автоматически сразу заменялись на русские?

ОлегА 17.01.2013 09:16

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;
    }

рони 17.01.2013 10:17

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!"));

Sweet 17.01.2013 11:12

Мне кажется вариант ОлегА с объектом правильнее, но дальше там какая-то каша. А еще, по-моему, .toLowerCase и .toUpperCase - лишнее. Я бы сделал так:
function Auto( string ) {
  var replacer = {
    "Е": "T", "у": "e", "ы": "s", "е": "t"
  };
  
  return string.replace(/[А-яЁё]/g, function ( x ){
    return replacer[ x ];
  });
};

alert( Auto( "Еуые" ) );

ОлегА 17.01.2013 13:49

Sweet, да так было бы правильнее, но в объекте получается будут дублироваться буквы, а я так не хотел делать

ОлегА 17.01.2013 14:11

вот конечный результат -
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();
        });
    }

Deff 17.01.2013 15:15

Аналог 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

Amateur 18.01.2013 12:45

А мне вот такое решение подсказали

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);
});

ОлегА 18.01.2013 13:03

Amateur, ну это же тот же принцип, который и я предложил, просто он у вас срабатывает при наборе, но то же можно и с моей функцией сделать

tuchkovo-auto 11.02.2014 10:15

Цитата:

Сообщение от Amateur
А мне вот такое решение подсказали

Спасибо! Единственное, что у меня (FireFox27+jQuery v1.8.3) из всего выше написаного работает! Вот только когда скрипт в режиме смены знака, то при попытке переместить курсор назад и добавить слово, после добавления одного символа курсор самовольно перескакивает в конец предложения. Как это поправить?


Часовой пояс GMT +3, время: 07:48.