多场验证

时间:2010-12-09 04:15:45

标签: flex actionscript-3

我有一个简单的表格,包含电子邮件和密码。我想在电子邮件和电子邮件中显示提交按钮。密码有效。我的想法是当我运行我的handleValidator函数时,我可以检查电子邮件&的“有效”属性的某种值。通行证的“有效”财产。如何访问项目的有效属性?

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
xmlns:s="library://ns.adobe.com/flex/spark"                     
    xmlns:mx="library://ns.adobe.com/flex/mx" 
            >
<fx:Script>
    import mx.events.ValidationResultEvent;
    private function handleValidator ( eventObj:ValidationResultEvent ):void {

        if( eventObj.type==ValidationResultEvent.VALID
                          // what goes here?????
                          //  && emailValidator.valid = true ?????
                          //  && passValidator.valid = true  ??????

                          ){ 
            submit.visible = true;
        }
        else {
            submit.visible = false;
        }
    }


</fx:Script>

<fx:Declarations>

    <mx:EmailValidator id="emailValidator" source="{email}" property="text"
                       trigger="{email}" triggerEvent="change"
                       valid="handleValidator(event)" invalid="handleValidator(event)"
                       />
    <mx:StringValidator id="passValidator" source="{pass}" property="text"
                        trigger="{pass}" triggerEvent="change"
                        valid="handleValidator(event)" invalid="handleValidator(event)"
                        minLength="5" maxLength="10"
                        />
</fx:Declarations>
<s:VGroup>

<s:TextInput id="email" />
<s:TextInput id="pass" />
<s:Button id="submit" visible="false" />

</s:VGroup>
</s:Application>

3 个答案:

答案 0 :(得分:6)

尝试这样的事情。首先将验证器放入数组:

<mx:Array id="validators">
    <mx:EmailValidator id="emailValidator" source="{email}" property="text">

    <mx:StringValidator id="passValidator" source="{pass}" property="text"
        minLength="5" maxLength="10"/>
</mx:Array>

为您的输入添加更改事件处理程序:

<s:TextInput id="email" change="validate()"/>
<s:TextInput id="pass" change="validate()"/>

处理程序将触发验证:

private function validate():void{
    //validate both your inputs simultaneously
    var errors:Array = Validator.validateAll(validators);
    if (errors.length>0){
        //hide submit button
    }else{
        //show submit button
    }
}

就是这样。

答案 1 :(得分:1)

我也会选择2DH进行验证,你也可以查看以下两篇帖子,我在验证时经常会这样做。

http://joelhooks.com/2009/02/01/form-validation-for-the-lazy-programmer-in-flex/

这解释了2DH给出的相同技术

http:// aralbalkan.com/1125

这个增加了一些功能,可以更好地显示错误工具提示。

希望有所帮助。

答案 2 :(得分:0)

在handleValidator中

,检查event.currentTarget id以确定电子邮件或密码是否已经过验证。相应地做出反应,即如果电子邮件或密码有效,则增加变量,如果无效,则向用户发送某种形式的错误消息。

如果两个字段都有效,则您的变量应该等于要验证的字段数(假设变量的默认值为0),则可以显示提交按钮。