Замена символов при вводе javascript
Для отслеживание изменеий возможно использовать события клавиатуры:
keydown, keyup, keypress, input...
keypress устарело, его использование не рекомендуется.
keydown срабатывает до вставки символа в элемент, потому сложно изменить при нажатии в этом событии.
keyup подходит, но при быстром нажатии на клавиши он не успевал срабатывать и пропускает некоторые символы.
Этот пример использования события input.
Функция обрабатывающая событие, запрещает вставку если исключается по регулярному выражению, ограничивает длинну ввода. В зависимости от параметров: вместо английского ставит русский символ и наоборот, возвращает в вверхнем регистре.
ParametrizedInput: function (e, t, regexp, maxlength, upper, translate) { let textExist = t.value.length === 0 ? t.value : t.value.substring(0, t.value.length - 1); let charInput = t.value.substring(textExist.length); if (ft.IsServiceKey(e.keyCode)) return false;// 'ft' - внутренняя переменная if (e.ctrlKey === true) return false; if (regexp.test(charInput) || textExist.length === maxlength) { e.preventDefault(); t.value = textExist; return false; } if (upper) { charInput = charInput.toUpperCase(); } if (translate === "ru") { charInput = ft.EngCharToCyrillic(charInput); } else if (translate === "eng") { charInput = ft.CyrillicCharToEng(charInput); } t.value = textExist + charInput; },
Подписание на событие "input":
$(document).ready(function(){ $('.ftsroms').on('input', function (e) { ft.input.ParametrizedInput(e, this, /[^0-9a-zA-Zа-яА-Я -]/, 10, false, "none"); }); $('.ftnmoms').on('input', function (e) { ft.input.ParametrizedInput(e, this, /[^0-9]/, 16, false, "none"); }); $('.ftfio').on('input', function (e) { ft.input.ParametrizedInput(e, this, /[^a-zA-Zа-яА-Я -]/, 40, true, "ru") }); }