这非常令人沮丧。我使用的是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>
答案 0 :(得分:1)
我添加了最初针对同一问题打开的other question的答案。我会在这里发布一点,因为用户可能会发现这个问题,而不是另一个问题。或者你可以删除这个问题。
我认为问题是mask
代码上的<cfinput type="datefield" ...
属性仅在使用Flash表单时才有效 - documentation reference。
我从下面的文档中 强调文字 :
屏蔽cfcalendar和日期字段输入
在cfcalendar标记和 Flash格式的日期字段输入控件 中,使用以下掩码来确定输出的格式。您可以在掩码中使用大写或小写字符:
...
以下模式指定 Flash表单 将使用日期字段输入控件选择的日期作为文本以04/29/2004格式发送给ColdFusion:
<cfinput name="startDate" type="datefield" label="date:" mask="mm/dd/yyyy"/>
由于您没有使用Flash表单,因此掩码不适合您。您可以尝试切换到常规<cfinput type="text" ...
输入,并将掩码更改为"99/99/9999"
。这将为您提供正确的格式,但用户仍然可以输入无效日期,因此您需要额外的代码来捕获它。
这只是为什么使用内置的ColdFusion UI标签不是一个好主意的另一个例子。它们适用于非常简单的示例,但是当您需要更多自定义时,它们会让您失望。最好使用JavaScript库(如jQuery)进行客户端验证。 Adobe自己的Ben Forta acknowledged this several years ago。 ColdFusion-UI-the-Right-Way project因此也开始了。
修改强>
关于张贴的另一个问题,亚当指出another reference in the ColdFusion documentation强调了我的观点。我从下面的文档中 强调了文字 :
屏蔽输入数据
在HTML和Flash表单中,mask属性控制可以输入文本字段或在日期字段输入控件日历中选择的数据格式。 在HTML格式中,它不会阻止用户在日期字段输入控件中键入不遵循掩码的日期。 您可以在字段上组合屏蔽和验证。< / p>