Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Coldfusion 在a<;上使用起始日期;cfinput type=";“日期字段”&燃气轮机;冷若冰霜_Coldfusion_Validation_Cfinput - Fatal编程技术网

Coldfusion 在a<;上使用起始日期;cfinput type=";“日期字段”&燃气轮机;冷若冰霜

Coldfusion 在a<;上使用起始日期;cfinput type=";“日期字段”&燃气轮机;冷若冰霜,coldfusion,validation,cfinput,Coldfusion,Validation,Cfinput,我正在使用,我需要限制可以选择的日期。我不允许选择过去的日期。有人帮忙吗 谢谢 好吧,没有简单的方法可以阻止客户选择过去的某一天。不过,我们在一些表单上有这样的字段,我们在服务器端根据当前日期进行检查。只需记住生成日期而不需要比较时间,否则您将得到[今天的日期]

我正在使用
,我需要限制可以选择的日期。我不允许选择过去的日期。有人帮忙吗


谢谢

好吧,没有简单的方法可以阻止客户选择过去的某一天。不过,我们在一些表单上有这样的字段,我们在服务器端根据当前日期进行检查。只需记住生成日期而不需要比较时间,否则您将得到[今天的日期]您也应该使用服务器端验证,但我相信您可以使用“范围”属性来限制有效日期。

您有两个选项严格地在服务器端验证它,或者另外添加客户端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>

此功能的文档和示例代码位于:

另一篇帖子建议使用range功能,但是我没能做到这一点,因为Adobe文档说它只支持numeric类型

或者,您可以使用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>

范围内的函数(提交日期){
var start=Date.parse(“08/10/2009”);
var end=日期解析(“09/11/2009”);
var userDate=Date.parse(document.getElementById('leaveDate').value);
var previousDate=document.getElementById('calendarWorkaround')。值;
如果(!isNaN(userDate)&&(previousDate!=userDate)){
document.getElementById('calendarWorkaround')。value=userDate;
如果(开始=用户日期){
提醒(“您的日期是正确的!”);
}否则{
警报(“日期不正确”);
}
}
}
现在,我将在datefield上为cfinput使用onChange属性,但是有一个bug,它没有调用javascript函数,这似乎在其他几页的在线页面上都有记录。我使用的解决方法是使用bind属性的cfajaxproxy调用。如果您使用的是cfeclipse,它会给您一个错误,即语法不正确,但对我来说效果很好

隐藏的输入类型是必需的,因为使用cfajaxproxy标记,每次单击日历图标时,它都会调用javascript函数,这不是我们想要的。因此,我存储用户选择的最后一个值(或页面加载时的-1),以便仅当值发生变化时才执行javascript来检查它是否在范围内。这有点像黑客,但是
的实现并不像文档中描述的那样有效

您还可以修改此示例,以便coldfusion动态生成开始日期和结束日期,从而避免硬编码


请记住,无论您选择哪种方式,都应该始终检查值服务器端,以防用户禁用javascript

起初,我以为
会有帮助,但似乎
startrage
endrange
是用于禁用范围的


我想如果你真的想限制这个范围,可以使用其他类似的东西,比如通过实验,我可以定制支持javascript文件来实现。不过,jQuery选项听起来也不错。

我刚刚在cfcalendar组件的endrange属性中添加了100年,我认为没有人会坐在那里点击超过您的验证:

<cfset startRange = #dateformat(now(), 'dd/mm/yyyy')# >
<cfset endRange = dateadd("yyyy", 100, #Now()#)>
<cfset selectedDate = dateadd("d", -1, #Now()#)>

<cfcalendar name="start_period" mask="dd/mm/yyyy" selecteddate="#selectedDate#" startRange="#startRange#" endrange="#endRange#">

西蒙。

试试这个:

三个日期字段

一个被hight=0隐藏。这是你的出发点。我使用了“今天加一”,因此用户可以在“请求日期”字段中选择“今天”

<cfformgroup type="horizontal"  height="0">
<cfinput type="datefield" name="firstAvailableDate" value="#dateAdd('d', +1,now())#" 
</cfformgroup>


不能使日期字段限制可以选择的日期。没有任何属性来定义此类型的规则。您必须使用Jquery日期选择器。如果您想使用cfinput,可以解决这个问题

<script language="JavaScript">
 $(function() {
    $( "#date" ).datepicker({
      changeMonth: true,
      changeYear: true,
       minDate: new Date(1939, 10 - 1, 25),
       maxDate: '-1D'
    });
  });
</script>
<cfinput name="date" type="text" size="30"  id="date" >

$(函数(){
$(“#日期”).datepicker({
变化月:对,
变化年:是的,
minDate:新日期(1939年10月1日至25日),
maxDate:“-1D”
});
});

Coldfusion版本?Flash表单还是HTML?OT:我读了标题,觉得上面写的是星号$天哪,我是个笨蛋。对不起,范围只适用于数值,不适用于日期。除非。。。您使用的不是“datefield”,而是3个数字文本字段……如果您想在日历中使用jQuery时使用cfinput,则不需要cfinput。
<cfinput type="datefield" name="datedue"  id="datedue"  mask="mm/dd/yyyy"   width="100" label=”Due Date” onFocus="datedue.disabledRanges=[{rangeEnd:request_date.selectedDate}];" />
</cfformgroup type="horizontal" >
<script language="JavaScript">
 $(function() {
    $( "#date" ).datepicker({
      changeMonth: true,
      changeYear: true,
       minDate: new Date(1939, 10 - 1, 25),
       maxDate: '-1D'
    });
  });
</script>
<cfinput name="date" type="text" size="30"  id="date" >