 
			
				17.01.2013, 06:43
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 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 английские буквы автоматически сразу заменялись на русские?  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				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.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				17.01.2013, 10:17
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		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!"));
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				17.01.2013, 11:12
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 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( "Еуые" ) );
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				17.01.2013, 13:49
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 25.08.2011 
					
					
					
						Сообщений: 420
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Sweet, да так было бы правильнее, но в объекте получается будут дублироваться буквы, а я так не хотел делать 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось ОлегА, 17.01.2013 в 13:57.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				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();
        });
    }
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				17.01.2013, 15:15
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 без статуса 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 25.05.2012 
					
					
					
						Сообщений: 8,219
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		
		
	
		
		
		
		
		
		
		
			 			  
				
				Последний раз редактировалось Deff, 17.01.2013 в 15:35.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				18.01.2013, 12:45
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 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.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				18.01.2013, 13:03
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 25.08.2011 
					
					
					
						Сообщений: 420
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Amateur, ну это же тот же принцип, который и я предложил, просто он у вас срабатывает при наборе, но то же можно и с моей функцией сделать 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				11.02.2014, 10:15
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Интересующийся 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 11.02.2014 
					
					
					
						Сообщений: 14
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от Amateur
			
		
	 | 
 
	| 
		А мне вот такое решение подсказали
	 | 
 
	
 
 Спасибо! Единственное, что у меня (FireFox27+jQuery v1.8.3) из всего выше написаного работает! Вот только когда скрипт в режиме смены знака, то при попытке переместить курсор назад и добавить слово, после добавления одного символа курсор самовольно перескакивает в конец предложения. Как это поправить?  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |