2

Flex に電話番号バリデーターがあり、電話番号用の TextInput コントロールが 2 つあるとします。基本的に同じ属性を持つ 2 つの別個のバリデーター コントロールを定義したくありませんが、各バリデーターには「ソース」属性が 1 つしかありません。複数のコントロールで同じバリデータを使用するにはどうすればよいですか? (または同等のソリューション)

4

2 に答える 2

3

インラインではありませんが、たとえばフォームの送信時や、ユーザーがコントロールからタブアウトしたときなど、プログラムで検証を実行できます。単一のPhoneNumberValidatorを使用して2つのフォームフィールドを検証する例を次に示します。[送信]ボタンがクリックされると、検証が行われます。

<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>

それが役に立てば幸い!

于 2009-01-23T01:51:24.900 に答える
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 キーで削除すると、すぐに自動的に緑になります。
  3. フィールドから離れて、別のテキスト入力の値を変更します(これは単なるテキスト入力です。これはフォーム要素がいくつかあります)。その後、SHIFT + TABS でテキストフィールドを超えた値に戻り、追加の入力された数値を削除します。あなたの価値が受け入れられます。
  4. もう一度値を入力すると、警告ゾーンに入ります。フィールドを離れて、他のフォーム要素にいくつかの変更を加えます。
  5. 次に、MOUSE CLICK によってフィールドされた値を超えたテキストに戻り、DEL から削除を開始します。追加の値を削除しても、フィールドはまだ警告ゾーンにいることを示しています。

実際の結果: 追加の数字を削除しても、フィールドは赤のままです

期待される結果: 追加の番号を削除すると、フィールドは通常の状態になります。

この問題の画像は、スクリーン ショットの表示で表示できます。

于 2009-11-24T08:04:00.350 に答える