2009-01-22 52 views
2

假設我在flex中有一個電話號碼驗證器,並且我有兩個用於電話號碼的TextInput控件。我不希望定義兩個單獨的驗證器控件,它們具有基本相同的屬性......但每個驗證器只有一個「源」屬性。我如何在多個控件上使用相同的驗證器? (或任何等效的解決方案)在Flex中的幾個控件上使用相同的驗證器

回答

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. 的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刪除,即使您刪除了其他值,仍然字段顯示您處於警告區域。

實際結果: 即使刪除其他號碼,還是場紅

預期結果: 如果刪除其它號碼,現場應該來其正常狀態。

此問題的圖片可查看View Screen Shot

相關問題