Top.Mail.Ru
Ответы
Аватар пользователя
5 лет назад
от
Изменено

Как заменять раскладку клавиатуры событием .on('input')?

Мне необходимо менять раскладку клавиатуры, при вводе текста в input. Сейчас у меня такой код:

const Ru = "йцукенгшщзхъфывапролджэячсмитьбю",
En = "qwertyuiop[]asdfghjkl;'zxcvbnm,.";
const RuEn = [...En].reduce((a, e, i) => (a[e] = Ru[i]) && (a[e.toUpperCase()] = Ru[i].toUpperCase()) && a, {});
var corrected = 0;

$('#ta').on('input', function() {
var $th = $(this),
val = $th.val(),
end = $th.prop('selectionEnd');
for (var i = !!corrected * (val.length - corrected - 1); i < end; i++) {
var s = RuEn[val[i]];
if (s) this.value = val.split(val[i]).join(s);
}
});

Данный способ не очень хороший, так как, он не распознаёт регистр таких букв как - [Х, Ъ, Ж, Э, Б, Ю] и выводит только в верхнем регистре. Есть ли, какое-то хорошее решение, полностью на jQuery?

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Новичок
5лет

Убери toUpperCase и делай сравнение ВСЕХ символов:
Ru = "йцукенгшщзхъфывапролджэячсмитьбюЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ"
En = "qwertyuiop[]asdfghjkl;'zxcvbnm,.QWERTYUIOP{}ASDFGHJKL:\"ZXCVBNM<>"

А проще - сделать структуры:
{'q': 'й', 'w': 'ц', ..} и {'й': 'q', 'ц': 'w', ..}
и преобразовывать символы прямым обращением по индексу.

Аватар пользователя
Ученик
2мес

1
1
1
1
1
1
1
1
1