2014-10-14 3 views
0

Это очень неприятно. Я использую 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> 
+3

Разве это не дублирующий вопрос? http://stackoverflow.com/q/26286518/1636917. Как я уже говорил, тип даты используется для форм Flash. Вот почему это не работает для вас. –

+0

Вы видите ответ, чтобы исправить это? –

+2

Невозможно исправить. Это только для форм Flash. –

ответ

1

Я добавил ответ на other question, который первоначально был открыт по этому же вопросу. Я также опубликую здесь немного, так как пользователи могут найти этот вопрос, а не другой. Или вы можете удалить этот вопрос.

Я считаю, что проблема заключается в том, что атрибут mask по коду <cfinput type="datefield" ... работает только при использовании Flash-форм - documentation reference.

У меня есть подчеркнул текст из этой документации ниже:

маскирующего cfcalendar и DateField вход

В cfcalendar теге и флэш-контроль входного формата DateField , для определения формата вывода используются следующие маски. Вы можете использовать заглавные или строчные символы в маске:

...

Следующий шаблон указывает, что флэш форма посылает дату, выбранную с помощью управления вводом DateField в ColdFusion в виде текста в формате 04/29/2004:

<cfinput name="startDate" type="datefield" label="date:" mask="mm/dd/yyyy"/>

Поскольку вы не используете Flash, образуют маска не работает для вас. Вы можете попробовать перейти на обычный вход <cfinput type="text" ... и сменить маску на что-то вроде "99/99/9999". Это даст вам правильный формат, но пользователь все равно может ввести недопустимые даты, поэтому вам понадобится дополнительный код, чтобы поймать его.

Это еще один пример того, почему использование встроенных тегов ColdFusion не является хорошей идеей. Они работают для очень простых примеров, но когда вам нужно больше настроек, они вас не подведут. Вам будет лучше использовать библиотеку JavaScript (например, jQuery) для проверки на стороне клиента. Собственный Adobe Ben Forta acknowledged this several years ago. Из-за этого также был запущен ColdFusion-UI-the-Right-Way project.

EDIT

С другой вопрос, который был размещен Адам отметил another reference in the ColdFusion documentation, что усиливает мою точку зрения.У меня есть подчеркнул текст из этой документации ниже:

Маскирующие входные данные

В HTML и Flash-форм, атрибут маски контролирует формат данных, которые могут быть введены в текст поле или оно выбрано в календаре управления входным сигналом даты. В HTML-формате это не мешает пользователям вводить дату, которая не следует маске, в элемент управления ввода даты. Вы можете комбинировать маскирование и проверку на поле.

Смежные вопросы