2013-10-07 63 views
0

我想驗證一個Flex TextInput使用StringValidator。我發現,我能做到這一點,像這樣:指定多個事件來觸發StringValidator?

<mx:StringValidator source="{myTextInput}" 
        property="text" 
        triggerEvent="{TextEvent.TEXT_INPUT}"/> 

不過,我想驗證文本不只是在textInputevent,同時也對事件的內容event

    triggerEvent="{FocusEvent.FOCUS_OUT}" 
        triggerEvent="{TextEvent.TEXT_INPUT}"/> 

但是,重新定義triggerEvent這樣兩次是非法的。是否有可能根據多個不同的事件觸發StringValidator

+0

您必須爲FOCUS_OUT編寫您自己的事件處理程序,並且我相信在驗證程序實例上調用validate()方法。在我的經​​驗中,該方法比使用triggerEVent更普遍。 – JeffryHouser

回答

1

嘗試這樣:

MXML代碼

<mx:StringValidator source="{myTextInput}" property="text" 
     triggerEvent="validateInput"/> 

    <mx:TextInput id="myTextInput" 
      textInput="inputEvent(event)" 
      focusOut="inputEvent(event)"/> 

處理

private function inputEvent(event:*):void { 
    dispatchEvent(new Event("validateInput")); 
} 

其他變化

處理

private function inputEvent(event:*):void {    
    myValidator.validate(); 
} 

MXML

<mx:StringValidator id="myValidator" source="{myTextInput}" property="text"/> 
0

您可以將兩個驗證器附加到同一個字段。 唯一的問題是,有兩種情況都可能觸發事件。 例如,如果您在文本輸入中突出顯示彈出窗口,它也將突出顯示。

Howevere這是一個工作示例:

<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> 
      <![CDATA[ 
       import mx.events.ValidationResultEvent; 

       protected function stringvalidator1_validHandler(event:ValidationResultEvent):void 
       { 
        trace("Validated testInput");     
       } 

       protected function stringvalidator1_invalidHandler(event:ValidationResultEvent):void 
       { 
        trace("Invalidated testInput");     

       } 
       protected function stringvalidator2_validHandler(event:ValidationResultEvent):void 
       { 
        trace("Validated focusOut");      
       } 

       protected function stringvalidator2_invalidHandler(event:ValidationResultEvent):void 
       { 
        trace("Invalidated focusOut");     

       } 


      ]]> 
    </fx:Script> 

    <fx:Declarations> 
     <mx:StringValidator source="{fname}" minLength="4" maxLength="20" 
          property="text" valid="stringvalidator1_validHandler(event)" 
          invalid="stringvalidator1_invalidHandler(event)" 
          triggerEvent="{TextEvent.TEXT_INPUT}"/> 
     <mx:StringValidator source="{fname}" minLength="4" maxLength="20" 
          property="text" valid="stringvalidator2_validHandler(event)" 
          invalid="stringvalidator2_invalidHandler(event)" 
          triggerEvent="{FocusEvent.FOCUS_OUT}"/> 

    </fx:Declarations> 

    <s:Panel title="StringValidator Example" 
      width="75%" height="75%" 
      horizontalCenter="0" verticalCenter="0"> 
     <mx:Form left="10" right="10" top="10" bottom="10"> 
      <mx:FormItem label="Enter a name between 4 and 20 characters: "> 
       <s:TextInput id="fname" width="100%"/> 
      </mx:FormItem> 
     </mx:Form> 
    </s:Panel> 

</s:Application> 
0

一個驗證僅附着一個觸發事件。如果你想觸發更多的事件,所以你必須添加更多的驗證器,其中源是相同的字段,但你改變了eventTrigger屬性。

所以,你必須:

<mx:StringValidator source="{myTextInput}" 
property="text" 
triggerEvent="{TextEvent.TEXT_INPUT}"/> 

和:

<mx:StringValidator source="{myTextInput}" 
property="text" 
triggerEvent="{FocusEvent.FOCUS_OUT}"/>. 

恕我直言,我對事件的內容只添加一個驗證,所以你讓免費用戶編寫的每獸,但是當你離開控制,你會做所有的檢查和驗證。

0

TextEvent.TEXT_INPUT不會檢測退格鍵和刪除鍵事件。改用Event.CHANGE。