Суть проблемы: при вводе пользователем запятой в input определённого класса заменять её на точку. Решение необходимо было исключительно для движка Gecko.
Путь решения: полазив по Сети, я нашёл несколько реализаций. Самое простое - использовать replace(/\,/g, "."), но при этом курсор пользователя постоянно будет смещаться в конец ввода, кроме того, будет заметна процедура подмены символа. Посложнее - подавлять событие при помощи event.preventDefault() и при помощи манипуляций с obj.selectionStart вставлять на нужное место символ, оставляя курсор там же. Но, как по мне, это слишком сложный вариант.
Потому я решил сделать это через event.preventDefault() и эмуляцию нажатия клавиши, создав и запустив цепочку событий keydown-keypress-keyup. Почитав необходимую документацию и таблицу символов Unicode, я написал следующий код, использующий jQuery:
/* Comma-to-period keypress handler */ /* This code uses jQuery framework */ $(document).ready(function(){ $("input.decimal").keypress(function(e){ var pntUniCode = 0x2E, comUniCode = 0x2C; /* Unicode FULL STOP (aka PERIOD) and COMMA hex codes */ if (e.which == comUniCode) { e.preventDefault(); var newEvent = document.createEvent("KeyboardEvent"); newEvent.initKeyEvent('keydown', true, true, null, false, false, false, false, 0, pntUniCode); e.target.dispatchEvent(newEvent); newEvent.initKeyEvent('keypress', true, true, null, false, false, false, false, 0, pntUniCode); e.target.dispatchEvent(newEvent); newEvent.initKeyEvent('keyup', true, true, null, false, false, false, false, 0, pntUniCode); e.target.dispatchEvent(newEvent); } }); });
Его можно сохранить в файл и подключить к странице, на которой есть элементы с классом decimal, тогда при вводе запятые будут заменяться на точки. Вуаля!
PS: Поскольку я не считаю себя особым спецом в JavaScript, то любая конструктивная критика только приветствуется.
Комментариев нет:
Отправить комментарий