Часто стоит задача ограничить возможность ввода букв в поле ввода.
Многие источники предлагают сделать это следующим образом, присоединив обработчик событий нажатия клавиш к следующему коду:
Этот метод имеет ряд недостатков, например, пользователь не сможет вводить цифры на цифровой клавиатуре, в Opera не будут работать клавиши табуляции, вверх, влево и т. д. Как это сделать правильно? Но есть и хорошие идеи, модификация которых позволяет добиться желаемого результата.return ((event.keyCode>47)&&(event.keyCode<58))
function testKey(e)
{
// Make sure to use event.charCode if available
var key = (typeof e.charCode == 'undefined' ? e.keyCode : e.charCode);
// Ignore special keys
if (e.ctrlKey || e.altKey || key < 32)
return true;
key = String.fromCharCode(key);
return /\d/.
test(key);
}
Я решил написать плагин jQuery на основе этого кода.
Но чтобы не изобретать велосипед, я решил поискать готовые плагины и нашел один.
digitalbush.com/projects/masked-input-plugin .
Действительно замечательный плагин, но мне нужно было иметь возможность задавать условия, чтобы поле было целыми или дробными числами.
Итак, какие задачи я перед собой поставил:
- Установите тип «float», «int» или регулярное выражение.
- Установите разделитель типа «float».
- Установите количество символов до и после разделителя.
- Значение по умолчанию, если пользователь ввел значение через контекстное меню.
Остаётся только предусмотреть случай, если пользователь вставил значение через контекстное меню; для этого я прикрепил к событиям размытия обработчик, в котором проверял нужное нам регулярное выражение.
Однако когда я начал все проверять, то заметил, выделял ли пользователь какую-то часть текста во Вводе мышкой.
Он мог вставить недопустимый символ, обойти это регулярное выражение, чтобы этого избежать, я брал выделенный текст (тут пришлось иметь дело с кроссбраузерностью) и проверял его по условиям.
Источники на github И демо Использованные книги:
- habrahabr.ru/blogs/javascript/55922 .
- xpoint.ru/know-how/JavaScript/PoleznyieFunktsii?38#Fil 'трВводаДляТекстовогоПоля
-
Что Внутри Высоконагруженных Сервисов?
19 Oct, 24 -
Откуда Берутся Идеи?
19 Oct, 24