Flex DateField使用Editable = True验证日期

时间:2011-02-15 20:25:59

标签: flex validation datefield

我们有一个带有Editable = true

的Datefield组件
<mx:DateField id="startDate"  
                                  width="120"
                                  editable="true"
                                  formatString="MM/DD/YYYY"
                                  selectableRange="{{rangeStart : new Date(2010,0,1), rangeEnd : new Date()}}"
                                  showToday="true"
                                  labelFunction="formatDate" 
                                  restrict="[0-9] '\/'" change="startDate_clickHandler(event)"
                                  yearNavigationEnabled="true" 
                                  text="{}" tabIndex="15" />

日历包含我们想要的一切(只能在2010年1月1日之后选择有效日期)。现在的问题是,如果用户输入(Editable = true)无效日期或任何日期&lt; 01/01/2010,我如何验证并显示日期无效的警报。如果您对此有任何帮助,我们将不胜感激。

由于

哈里什

4 个答案:

答案 0 :(得分:1)

“日期字段”组件具有您可以收听的“数据更改”事件。因此,您可以将处理程序附加到该事件,并根据需要进行验证。

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/controls/DateField.html#event:dataChange

答案 1 :(得分:1)

DateField组件有一个valueCommit事件,您可以收听。因此,您可以将处理程序附加到该事件,并根据需要进行验证。

答案 2 :(得分:0)

答案 3 :(得分:0)

您可以通过以下方式完成。

  • 如果用户指定未指定任何内容(或空格),则将其视为用户想要清除所选日期。
  • 如果用户指定了无效日期,则它会回溯到今天的日期。您还可以通过设置DateField组件的errorString属性来更改此逻辑,以警告用户有关无效日期。
  • 对于范围开始日期之前的日期,它会回退到范围开始日期。
  • 对于范围结束日期之后的日期,它会回退到范围结束日期。

<fx:Script>
    <![CDATA[
        import mx.controls.DateField;
        import mx.utils.StringUtil;

        private function parseStartDate(valueString:String, inputFormat:String):Date
        {
            if (StringUtil.trim(valueString) == "")
                return null;

            var date:Date = DateField.stringToDate(valueString, inputFormat);
            if (date == null)
                date = new Date(startDate.selectableRange.rangeEnd.time);
            else if (date.time < startDate.selectableRange.rangeStart.time)
                date = new Date(startDate.selectableRange.rangeStart.time);
            else if (date.time > startDate.selectableRange.rangeEnd.time)
                date = new Date(startDate.selectableRange.rangeEnd.time);
            return date;
        }
    ]]>
</fx:Script>

<mx:DateField id="startDate"
    width="120"
    selectableRange="{{rangeStart : new Date(2010,0,1), rangeEnd : new Date()}}"
    showToday="true"
    yearNavigationEnabled="true"
    parseFunction="parseStartDate"
    editable="true"
    formatString="MM/DD/YYYY"
    restrict="[0-9/]"/>

<fx:Script> <![CDATA[ import mx.controls.DateField; import mx.utils.StringUtil; private function parseStartDate(valueString:String, inputFormat:String):Date { if (StringUtil.trim(valueString) == "") return null; var date:Date = DateField.stringToDate(valueString, inputFormat); if (date == null) date = new Date(startDate.selectableRange.rangeEnd.time); else if (date.time < startDate.selectableRange.rangeStart.time) date = new Date(startDate.selectableRange.rangeStart.time); else if (date.time > startDate.selectableRange.rangeEnd.time) date = new Date(startDate.selectableRange.rangeEnd.time); return date; } ]]> </fx:Script> <mx:DateField id="startDate" width="120" selectableRange="{{rangeStart : new Date(2010,0,1), rangeEnd : new Date()}}" showToday="true" yearNavigationEnabled="true" parseFunction="parseStartDate" editable="true" formatString="MM/DD/YYYY" restrict="[0-9/]"/>