|
Юрий Хан
9 июля 2007
|
Разработать контрол по типу раскрывающегося списка — весьма нетривиальная задача, есть очень много мест, где можно мелко и на первый взгляд незаметно накосячить, но пользователь вас проклянет.
Вот, например, есть такой биллинг Netup UTM5. У него все даты вводятся через выпадающий календарь. Интерфейс сделан на Java.
Проблема номер раз. Я не могу ввести значение с клавиатуры. Только клик мышью на кнопке раскрытия, потом, возможно, несколько кликов на перемотке лет и месяцев, наконец клик на нужной дате. При плотной работе с интерфейсом это кошмар.
Проблема номер полтора. Обычный комбобокс позволяет нажатиями стрелок вверх и вниз выбирать элемент без выдергивания всего списка. Стандартный календарный контрол в Windows выделяет фокусом одну из компонент даты и позволяет нажатиями стрелок прокручивать ее. UTM’овский календарь не делает ни того, ни другого.
Проблема номер два. Календарь выпадает по клавише F4, как это принято в Windows, но, поскольку текущее значение не подсвечивается и развернутый календарь не реагирует на клавиши-стрелки, толку с этого ноль.
Проблема номер три. Я привык, что в обычном комбобоксе, если я нажал кнопку не на том элементе, я могу ее протянуть и отпустить там, где надо. UTM позволяет нажать, протянуть и отпустить, но засчитывает ту точку, где было нажатие, заставляя меня снова выдернуть календарь и повторить выбор. Если вовремя замечу.
Проблема номер четыре. У них тип данных для дат расширен выделенным значением «Infinite date». В календаре это отображается как чекбокс, при отметке которого вся остальная часть календаря прячется. Я бы предпочел, чтобы она делалась неактивной, а лучше — оставляла бы возможность при выделенном варианте «Infinite» ткнуть в любой день.
Проблема номер пять. Во многих программах при выдернутом календаре невозможно ввести год с клавиатуры. Выбрать дату рождения, если клиенту 70 лет, а по умолчанию подставляется текущая дата — задача на терпение.
В веб-интерфейсе того же UTM есть формы, где требуется ввести временной интервал. Реализован как 10 селектов с числами от 1 до 31, месяцами с января по декабрь, годами в каком-то заранее заданном диапазоне, часами с 00 по 23, минутами с 00 по 60. Я готов терпеть в таких формах два поля ввода в формате YYYY-MM-DD hh:mm, максимум четыре (с разделением на дату и время).
Делая форму со свободным полем ввода какой-либо типизированной информации, важно правильно поставить валидацию. Многие начинающие дергают валидацию на каждое нажатие символа. В результате мы имеем формы, где для ввода отрицательного значения нужно сначала ввести модуль, а уже потом приписать к нему слева минус — поскольку чистый минус не является представлением числа.
Немногим лучше валидация по уходу из поля. Но, на мой взгляд, самое правильное — валидировать все поля только при нажатии OK (в случае веба — перед отправкой формы).
Пример хорошего поля ввода даты/времени — Excel. Если для ячейки выставлен формат ГГГГ-ММ-ДД, то одно число будет проинтерпретировано как день текущего месяца, два числа с разделителем — как дата в текущем году.
|
|
|
|