0

我想TextInput使用StringValidator. 我发现我可以这样做:

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

但是,我想不仅在textInput event上验证文本,而且在 focusOut event上验证文本。

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

但是,triggerEvent像这样重新定义两次是非法的。是否可以StringValidator基于多个不同的事件触发?

4

4 回答 4

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();
}

xml

    <mx:StringValidator id="myValidator" source="{myTextInput}" property="text"/>
于 2013-10-08T13:46:00.620 回答
0

您可以将两个验证器附加到同一字段。唯一的问题是在某些情况下两个事件都可能被触发。例如,如果您在文本输入时显示弹出窗口,则您也将聚焦。

然而,这是一个工作示例:

<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>
于 2013-10-08T07:47:59.890 回答
0

验证器仅附加一个触发事件。如果您想触发更多事件,那么您必须添加更多验证器,其中源是相同的字段,但您更改了 eventTrigger 属性。

所以你有了:

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

和:

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

恕我直言,我只会在 focusOut 上添加一个验证器,因此您可以让免费用户编写所有兽交行为,但是当您离开控件时,您将进行所有检查和验证。

于 2013-10-08T09:48:10.213 回答
0

TextEvent.TEXT_INPUT 不会检测退格和删除键事件。请改用 Event.CHANGE。

于 2015-12-21T16:38:31.473 回答