在Flex中的几个控件上使用相同的验证器

时间:2009-01-22 21:08:59

标签: flex flex3

假设我在flex中有一个电话号码验证器,我有两个TextInput控件用于电话号码。我不希望定义两个具有基本相同属性的单独验证器控件......但每个验证器只有一个“源”属性。如何在多个控件上使用相同的验证器? (或任何等效的解决方案)

2 个答案:

答案 0 :(得分:3)

不是内联的,但是您可以以编程方式执行验证,比如提交表单,或者当用户选择控件时,等等。这是使用单个PhoneNumberValidator验证两个表单字段的示例;单击“提交”按钮时会发生验证:

<mx:Script>
    <![CDATA[

        private function validatePhoneNumber(txt:TextInput):void
        {
            v.listener = txt;
            v.validate(txt.text);
        }

        private function btn_click():void
        {
            validatePhoneNumber(p1);
            validatePhoneNumber(p2);
        }

    ]]>
</mx:Script>

<mx:PhoneNumberValidator id="v" allowedFormatChars="()- .+" property="text" requiredFieldError="Required." wrongLengthError="Invalid length." invalidCharError="Invalid character." />

<mx:Form>
    <mx:FormItem label="Phone Number 1">
        <mx:TextInput id="p1" />    
    </mx:FormItem>
    <mx:FormItem label="Phone Number 2">
        <mx:TextInput id="p2" />    
    </mx:FormItem>
    <mx:FormItem>
        <mx:Button id="btn" label="Submit" click="btn_click()" />
    </mx:FormItem>
</mx:Form>

希望它有所帮助!

答案 1 :(得分:1)

重现的步骤:

  1. TextInput动态创建

    textInputBox = new MyTextInput;
    textInputBox.restrict = “0-9.”;
    textInputBox.maxChars = 24;
    amountValidator = new NumberValidator();
    amountValidator.source = textInputBox;
    amountValidator.property = “text”;
    amountValidator.allowNegative = false;
    amountValidator.domain = “real”;
    amountValidator.precision = 4;
    amountValidator.required = false;
    amountValidator.maxValue = 999999999999.9999;
    amountValidator.trigger = textInputBox;
    amountValidator.triggerEvent = Event.CHANGE;
    amountValidator.addEventListener(ValidationResultEvent.VALID, amountValid);
    amountValidator.addEventListener(ValidationResultEvent.INVALID, amountInvalid);
    
    private function amountValid(event:ValidationResultEvent):void
    {
        valid = true;
        fieldsValidated = true;
    }
    
    private function amountInvalid(event:ValidationResultEvent):void
    {
        valid = false;
        fieldsValidated = true;
    }
    
  2. 正如在创建中提到的那样,当我们超出限制时,它会显示我的红色边框错误,同时如果在达到给定的可接受限制时通过DEL键删除它们,则很快会自动变为绿色。 / LI>
  3. 离开该字段并更改另一个textinput的值(这只是一个textinput,这是一个有更多表单元素的表单),然后通过SHIFT + TABS返回值超出文本字段并删除其他输入的数字,当你很快来到绿色时,你的价值就被接受了。
  4. 现在再次输入更多值,现在您处于警告区域,然后离开该字段并对其他表单元素进行一些更改。
  5. 然后返回MOUSE CLICK提交的超出值的文本,并从DEL开始删除,即使您删除了其他值,仍然字段显示您处于警告区域。
  6. 实际结果 即使删除其他数字,仍然字段为红色

    预期结果 如果删除其他数字,字段应该处于正常状态。

    可以在View Screen Shot

    查看此问题的图片