Формат даты JavaScript для поля даты ColdFusion
Можно ли добавить к этой функции что-то, что настроит формат даты и потребует от пользователя ввода MM/DD/YYYY? МАСКА не работает..
Функция калькулятора комиссии:
function getDatePrice() {
var datePrice = 0;
var theForm = document.forms.form;
var purchasedate = theForm.elements.purchasedate;
var date = new Date(purchasedate.value);
if (Object.prototype.toString.call(date) !== '[object Date]') {
date = new Date();
}
var today = new Date();
var diffMilli = today - date;
var diffDays = Math.floor(diffMilli / 1000 / 60 / 60 / 24); // ..Divide!
if (diffDays > 30) {
datePrice = 20;
}
else {
datePrice= 0;
}
return datePrice;
}
Функция вызова:
function calculateTotal()
{
var titleFees = getDatePrice();
var divobj = document.getElementById('totalPrice');
divobj.style.display='block';
divobj.innerHTML = "Estimated Transfer Fees $"+titleFees;
}
Кнопка ввода: (требующая ColdFusion):
<cfinput
type="datefield"
name="purchasedate"
width="130"
required="yes"
message="Please enter purchase date."
value="#dateformat(now(),"mm/dd/yyyy")#"
oninput="calculateTotal();"
>
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"
, Это даст вам правильный формат, но пользователь все равно сможет ввести недопустимые даты, поэтому вам понадобится дополнительный код, чтобы его перехватить.
В комментариях вы заявили:
Что странно, что у меня есть другие, которые на самом деле работают как...
<cfinput type="text" name="odate" id="odate" validateat="onSubmit" validate="noblanks" required="yes" message="Please enter odometer date." value="" mask="99/99/9999" placeholder="08/05/2014">
но по какой-то причине это просто поле даты, которое не будет, кроме маски
Обратите внимание, что вы используете "text"
введите здесь, чтобы маска работала (как в моем предыдущем комментарии). Это только с "datefield"
типа что маска не работает; если вы не используете флэш-форму.
Это просто еще один пример того, почему использование встроенных тегов пользовательского интерфейса ColdFusion не очень хорошая идея. Они работают на очень простых примерах, но когда вам нужно больше настроек, они вам не подходят. Для проверки на стороне клиента лучше использовать библиотеку JavaScript (например, jQuery). Собственный Adobe Бен Форта признал это несколько лет назад. И проект https://github.com/cfjedimaster/ColdFusion-UI-the-Right-Way был запущен из-за этого.
РЕДАКТИРОВАТЬ
Адам указал на другую ссылку в документации ColdFusion, которая подтверждает мою точку зрения. Я подчеркнул текст из этой документации ниже:
Маскировка входных данных
В формах HTML и Flash атрибут mask контролирует формат данных, которые можно вводить в текстовое поле или которые выбираются в календаре управления вводом поля даты. В формате HTML это не мешает пользователям вводить дату, которая не следует за маской, в элемент управления вводом поля даты. Вы можете сочетать маскировку и проверку на поле.