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,124
|
|
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) из всего выше написаного работает! Вот только когда скрипт в режиме смены знака, то при попытке переместить курсор назад и добавить слово, после добавления одного символа курсор самовольно перескакивает в конец предложения. Как это поправить?
|
|
|
|