Что ж, у вас есть два варианта: проверять его строго на стороне сервера или дополнительно добавлять проверку JavaScript на стороне клиента.
Для серверной части ваша страница обработки cfm может использовать функцию DateCompare следующим образом:
<cfif DateCompare(Date1,Date2) EQUAL -1>
<!--- Date 1 < Date 2 --->
<cfelseif DateCompare(Date1,Date2) EQUAL 0>
<!--- Date 1 = Date 2 --->
<cfelseif DateCompare(Date1,Date2) EQUAL 1>
<!--- Date 1 > Date 2 --->
</cfif>
Документация и пример кода доступны для этой функции по адресу:
http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=functions_m-r_11.html
В другом посте предлагалось использовать функциональность диапазона, однако я не смог заставить это работать, потому что в документации Adobe сказано, что она поддерживается только для типа числовой .
В качестве альтернативы вы можете использовать javascript, чтобы проверить, находится ли дата в пределах диапазона в реальном времени на странице:
<html>
<head>
<script type="text/javascript">
function withinRange(submittedDate) {
var start = Date.parse("08/10/2009");
var end = Date.parse("09/11/2009");
var userDate = Date.parse(document.getElementById('leaveDate').value);
var previousDate = document.getElementById('calendarWorkaround').value;
if (!isNaN(userDate) && ( previousDate != userDate)) {
document.getElementById('calendarWorkaround').value = userDate;
if (start <= userDate && end >= userDate) {
alert("Your date is correct!");
} else {
alert("Date is incorrect.");
}
}
}
</script>
</head>
<body>
<cfform name="testing" id="vacationForm"action="testprocess">
<cfinput name="date" type="datefield" id="leaveDate">
<input type="hidden" name="workaround" id="calendarWorkaround" value="-1">
</cfform>
<!--- To get around onChange bug with cfinput type datefield --->
<cfajaxproxy bind="javaScript:withinRange({leaveDate})">
</body>
</html>
Теперь я бы использовал атрибут onChange для cfinput в поле даты , однако есть ошибка, что он не вызывает функцию javascript, которая кажется быть задокументировано на нескольких других страницах онлайн. Обходной путь, который я использовал, был вызов cfajaxproxy с атрибутом bind. Если вы используете cfeclipse, он выдаст ошибку, что синтаксис неправильный, но он работал нормально для меня.
Скрытый тип ввода необходим, потому что с тегом cfajaxproxy каждый раз, когда вы щелкаете по значку календаря, он вызывает функцию javascript, а это не то, что нам нужно. Поэтому я сохраняю последнее значение, выбранное пользователем (или -1 при загрузке страницы), чтобы JavaScript, чтобы проверить, находится ли он в пределах диапазона, выполняется только в случае изменения значения. Это что-то вроде хака, однако реализация <cfinput type="datefield">
не работает так, как задокументировано.
Вы также можете изменить этот пример так, чтобы Coldfusion Dynamic генерировал дату начала и дату окончания, чтобы он не был жестко запрограммирован.
Просто запомните, какой бы путь вы ни выбрали, вы всегда должны проверять сторону сервера значений на тот случай, если у пользователя отключен JavaScript.