Активная и пассивная проверка допустимости
Некоторые элементы ввода отклоняют символы по мере их ввода с кла' виатуры. Элемент управления, активно отклоняющий символы в про' цессе нажатия клавиш, – это пример активной проверки допустимо- сти. Так, например, элемент ввода текстовой информации может при' нимать только алфавитные символы и отвергать цифры. Некоторые элементы ввода отвергают ввод любых символов, кроме цифровых. Другие в реальном времени отвергают ввод пробелов, символов табу' ляции, дефисов и прочих знаков препинания. Некоторые разновидно' сти могут быть довольно интеллектуальными и отклонять ввод опре' деленных цифр, основываясь на оперативных вычислениях, например на вычислении контрольной суммы.
Когда активная проверка допустимости отклоняет нажатие клавиши, следует сообщить пользователю о том, что произошло и почему. Если такое объяснение будет предоставлено, пользователь не будет склонен считать, что ввод отвергнут беспричинно (или из'за неисправности клавиатуры). Кроме того, подобная обратная связь сообщает пользова' телю, что именно требуется программе.
Иногда диапазон допустимых данных таков, что программа не в со' стоянии определить их правильность в процессе набора, – требуется, чтобы пользователь закончил ввод. В этом случае процесс проверки начинается только после того, как элемент ввода потерял фокус, то есть когда пользователь закончил работу с этим полем ввода и перехо' дит к другому полю. Процесс проверки должен выполняться также при закрытии диалогового окна, а если элемент ввода находится не в диалоговом окне – тогда, когда пользователь вызывает другую функ' цию (например, когда он нажимает на кнопку Отправить на веб'страни' це). Если элемент управления ожидает, когда пользователь закончит вводить данные, и только потом приступает к проверке правильности – это пассивная проверка допустимости.
Элемент ввода может, например, ожидать, пока адрес не будет введен полностью, после чего проверить существование такого адреса в базе данных. Каждый отдельный символ является вполне допустимым, но весь адрес целиком может и не пройти проверку. Программа могла бы попытаться проверять адрес по мере ввода каждого отдельного симво' ла, но это, скорее всего, привело бы к перегрузке сети и сервера. Кроме того, хотя программа в принципе может знать в любой конкретный момент, допустим ли набранный адрес, пользователь может покинуть поле ввода до того, как полностью наберет его.
Чтобы организовать проверку правильности ввода, можно попробо' вать предусмотреть счетчик времени, который сбрасывается нажати' ем на очередную клавишу. Если счетчик достиг нуля, проверьте до' пустимость значения. Устанавливайте счетчик на время, приблизи' тельно равное половине секунды. Пока пользователь нажимает клави' ши чаще, чем раз в полсекунды, система чрезвычайно отзывчива. Если пользователь приостанавливается больше чем на 500 миллисе' кунд, программа разумно полагает, что пользователь сделал паузу для того, чтобы подумать (такой срок может означать «месяцы» жизни с точки зрения центрального процессора), и производит промежуточ' ный анализ введенной информации.
В целях обеспечения обогащенной визуальной обратной связи поле ввода может изменять свой цвет, отражая оценку корректности вве' денных данных. Поле ввода может отображаться в розовых оттенках, пока программа не убедилась в допустимости данных, после чего цвет поля ввода может измениться на белый или зеленый.
Оперативные подсказки
Еще одно неплохое решение проблемы проверки допустимости – опера- тивные подсказки. Это небольшие всплывающие окна, которые выгля' дят и ведут себя точно так же, как обычные всплывающие подсказки (хотя цветовое решение может быть иным, чтобы не возникало путани' цы). Их назначение – указать диапазон допустимых данных для эле' мента ввода, поддерживающего проверку допустимости, – как актив' ную, так и пассивную. Обычная всплывающая подсказка появляется,
когда курсор мыши на мгновение задерживается над элементом управления, тогда как оперативная подсказка с описанием допустимо' го диапазона данных должна появляться в тот момент, когда элемент управления обнаружит запрещенный символ (впрочем, такого рода подсказку можно выводить точно так же, как и обычную всплываю' щую подсказку, если курсор мыши задерживается над элементом вво' да на срок более одной секунды или около того). Если, например, поль' зователь вводит нечисловой символ в поле ввода числа, программа должна вывести панель с подсказкой около поля ввода, при этом не за' гораживая его. Такая подсказка, например, может содержать текст:
«0 – 9» – краткий, лаконичный, но очень эффективный. Да, ввод пользователя отвергнут – но он не игнорируется. Оперативные под' сказки можно использовать и для элементов ввода с пассивной провер' кой допустимости, как показано на рис. 21.19.
Рис. 21.19. Идиома всплывающей подсказки настолько эффективна, что она с легкостью может применяться в самых различных ситуациях. Вместо желтых всплывающих подсказок, которые заменяют текстовые надписи
на кнопках-значках, мы можем предусмотреть розовые подсказки, описываю- щие поведение неограничивающих элементов ввода. Такого рода оперативные подсказки способны также помочь в искоренении окон с сообщениями об ошиб- ках. В данном примере, если пользователь вводит значение меньше допусти- мого, программа может заменить введенное значение минимально допусти- мым и отобразить подсказку, которая немодально объясняет причину такой замены. Теперь пользователь может сразу набрать новое значение либо при- нять предложенное, не прерываясь на диалоговое окно с сообщением об ошибке