Маска поля даты не работает
Это очень расстраивает. я использую cfinput datefield
а также mask="MM/DD/YYYY"
и это не работает. Если это cfinput text
а также mask="MM/DD/YYYY"
это работает отлично. Я не хочу иметь только текстовое поле, хотя я хотел бы сохранить календарь, который дает вам поле даты... Проблема заключается в том, что когда они используют календарь, он имеет правильный формат MM/DD/YYYY, но если пользователь просто введите дату в текстовое поле, не используя календарь, пользователь может ввести все, что он хочет.. (122334435), что, очевидно, является недопустимым. Любые идеи или обходные пути, которые кто-то может знать?
Работает:
<cfform name="foo">
<cfinput
type="text"
name="test"
validate="eurodate"
mask="99/99/9999"
validateat="onblur" />
<input type="submit">
</cfform>
Не работает:
<cfform name="foo">
<cfinput
type="datefield"
name="test"
validate="eurodate"
mask="MM/DD/YYYY"
validateat="onblur" />
<input type="submit">
</cfform>
1 ответ
Я добавил ответ на другой вопрос, который был первоначально открыт относительно этой же проблемы. Я также опубликую немного здесь, так как пользователи могут найти этот вопрос, а не другой. Или вы можете удалить этот вопрос.
Я считаю, что проблема в том, что mask
атрибут на <cfinput type="datefield" ...
код работает только при использовании форм Flash - ссылка на документацию.
Я подчеркнул текст из этой документации ниже:
Маскировка ввода cfcalendar и поля даты
В теге cfcalendar и в элементе управления полем даты в формате Flash вы используете следующие маски для определения формата вывода. Вы можете использовать прописные или строчные буквы в маске:
...
Следующий шаблон указывает, что форма Flash отправляет дату, выбранную с помощью элемента управления полем даты, в ColdFusion в виде текста в формате 29.04.2004:
<cfinput name="startDate" type="datefield" label="date:" mask="mm/dd/yyyy"/>
Поскольку вы не используете форму Flash, маска не работает для вас. Вы можете попробовать перейти на обычный <cfinput type="text" ...
введите и измените свою маску на что-то вроде "99/99/9999"
, Это даст вам правильный формат, но пользователь все равно сможет ввести недопустимые даты, поэтому вам понадобится дополнительный код, чтобы его перехватить.
Это просто еще один пример того, почему использование встроенных тегов пользовательского интерфейса ColdFusion не очень хорошая идея. Они работают на очень простых примерах, но когда вам нужно больше настроек, они вам не подходят. Для проверки на стороне клиента лучше использовать библиотеку JavaScript (например, jQuery). Собственный Adobe Бен Форта признал это несколько лет назад. И проект https://github.com/cfjedimaster/ColdFusion-UI-the-Right-Way был запущен из-за этого.
РЕДАКТИРОВАТЬ
На другой вопрос, который был опубликован, Адам указал на другую ссылку в документации ColdFusion, которая подтверждает мою точку зрения. Я подчеркнул текст из этой документации ниже:
Маскировка входных данных
В формах HTML и Flash атрибут mask контролирует формат данных, которые можно вводить в текстовое поле или которые выбираются в календаре управления вводом поля даты. В формате HTML это не мешает пользователям вводить дату, которая не следует за маской, в элемент управления вводом поля даты. Вы можете сочетать маскировку и проверку на поле.