Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.01.2013, 06:43
Аспирант
Отправить личное сообщение для Amateur Посмотреть профиль Найти все сообщения от Amateur
 
Регистрация: 07.03.2010
Сообщений: 88

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

Код:
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 английские буквы автоматически сразу заменялись на русские?
Ответить с цитированием
  #2 (permalink)  
Старый 17.01.2013, 09:16
Аватар для ОлегА
Профессор
Отправить личное сообщение для ОлегА Посмотреть профиль Найти все сообщения от ОлегА
 
Регистрация: 25.08.2011
Сообщений: 420

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 в 13:51.
Ответить с цитированием
  #3 (permalink)  
Старый 17.01.2013, 10:17
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

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!"));
Ответить с цитированием
  #4 (permalink)  
Старый 17.01.2013, 11:12
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

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

alert( Auto( "Еуые" ) );
Ответить с цитированием
  #5 (permalink)  
Старый 17.01.2013, 13:49
Аватар для ОлегА
Профессор
Отправить личное сообщение для ОлегА Посмотреть профиль Найти все сообщения от ОлегА
 
Регистрация: 25.08.2011
Сообщений: 420

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

Последний раз редактировалось ОлегА, 17.01.2013 в 13:57.
Ответить с цитированием
  #6 (permalink)  
Старый 17.01.2013, 14:11
Аватар для ОлегА
Профессор
Отправить личное сообщение для ОлегА Посмотреть профиль Найти все сообщения от ОлегА
 
Регистрация: 25.08.2011
Сообщений: 420

вот конечный результат -
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();
        });
    }
Ответить с цитированием
  #7 (permalink)  
Старый 17.01.2013, 15:15
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Аналог meil.ru cкрипта http://hostjs-mybb2011.narod.ru/Rus_Lat.htm *Выделяем и жмём вторую кнопку справа
Вот тутошних пару тем
Как исправить раскладку клавиатуры в заданной области textarea
регулярки: замена ссылки на ютуб

Последний раз редактировалось Deff, 17.01.2013 в 15:35.
Ответить с цитированием
  #8 (permalink)  
Старый 18.01.2013, 12:45
Аспирант
Отправить личное сообщение для Amateur Посмотреть профиль Найти все сообщения от Amateur
 
Регистрация: 07.03.2010
Сообщений: 88

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

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, 18.01.2013 в 12:50.
Ответить с цитированием
  #9 (permalink)  
Старый 18.01.2013, 13:03
Аватар для ОлегА
Профессор
Отправить личное сообщение для ОлегА Посмотреть профиль Найти все сообщения от ОлегА
 
Регистрация: 25.08.2011
Сообщений: 420

Amateur, ну это же тот же принцип, который и я предложил, просто он у вас срабатывает при наборе, но то же можно и с моей функцией сделать
Ответить с цитированием
  #10 (permalink)  
Старый 11.02.2014, 10:15
Аватар для tuchkovo-auto
Интересующийся
Отправить личное сообщение для tuchkovo-auto Посмотреть профиль Найти все сообщения от tuchkovo-auto
 
Регистрация: 11.02.2014
Сообщений: 14

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автоматическая смена картинок через заданное время herotic Элементы интерфейса 45 15.05.2020 16:44
Автоматическая смена высоты блока maximale Элементы интерфейса 2 29.01.2012 13:20
Автоматическая смена ссылок peter888 Элементы интерфейса 18 28.07.2009 10:15
Автоматическая смена картинки enterwap Общие вопросы Javascript 3 02.12.2008 21:54