- PVSM.RU - https://www.pvsm.ru -
Как часто вам приходится вводить в интерфейс какой-либо программы/web-сервиса дробные значения? Если часто, то, вероятно, вы сталкивались с неадекватным поведением таких полей. Я, например, довольно регулярно бьюсь лбом об абсолютно тупые формы. Хотите знать, почему ввод дробных значений может довести до белого каления, и что с этим делать? Добро пожаловать по кат.
По моим наблюдениям наиболее часто встречаются следующие алгоритма их поведения:
В общем, на дворе XXI век, интерфейсы развиваются, а такое тривиальнейшее действия, как ввод дробных значений, до сих пор является головной болью пользователей. Несколько лет назад мне довелось проектировать (и частично кодить) небольшую программку, для пользователей которой ввод дробных значений был повседневной задачей. Естественно, мне не хотелось повторять варианты поведения, описанные выше. В результате недолгих раздумий родился довольно простой алгоритм.
Итак, что же делать с дробными числами? Прежде всего, нужно обязательно фильтровать ввод. Проверка при отправке формы — штука хорошая, но для пользователя гораздо удобнее, если ввести значение удаётся с первого раза, а не после пинка со стороны скрипта. Вот мой вариант такого фильтра:
Пример 1. Пользователь на русской раскладке последовательно нажимает клавиши [1] [2] [3] [б] [4] [5]. Результат в поле ввода:
123.45
Пример 2. Пользователь на английской раскладке последовательно нажимает клавиши [1] [2] [3] [Shift+?] [4] [5]. Результат в поле ввода:
123.45
Результат работы данного алгоритма даёт отличный (вау-)эффект. Пользователям больше не нужно думать о раскладке, нажимать Shift и гадать, точку или запятую принял за десятичный разделитесь программист. Опыты на живых пользователях показали, что после 1-2 недель работы с таким «умным» полем ввода возврат к обычным полям вызывает ломку и желание убить программиста сломать клавиатуру.
PS. Честно говоря, этот алгоритм настолько прост, что я на 146% уверен, что такой подход был использован уже не раз и не два. Но по непонятным причинам он не получил широкого распространения (если не верите, найдите ближайшее поле ввода и проверьте его поведение — почти уверен, что оно впишется в один из трёх «корявых» алгоритмов, а не в приведённый мной «правильный»).
PPS. Для тех, кто пишет на Delphi или Lazarus приведу ссылку на компонент CurrencyEdit, реализующий данный алгоритм на соответствующем языке: Google Code [1].
PPPS. Конкретные примеры не привожу исключительно из уважения в авторам соответствующих программ. Если кто-либо из читателей Хабра обнаружит в своём коде «неправильные» алгоритмы и решит поменять их на «правильные» — благодарность от пользователей гарантирована.
PPPPS. Как-то я не совсем в теме: в HTML-формах в принципе можно фильтровать ввод?
Автор: nik_vr
Источник [2]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/interfejsy/67762
Ссылки в тексте:
[1] Google Code: https://code.google.com/p/bookkeeper-free/source/browse/trunk/Components/BookTools/CurrencyEdit.pas
[2] Источник: http://habrahabr.ru/post/233647/
Нажмите здесь для печати.