我想使用TextInput
验证Flex 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
?
答案 0 :(得分: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"/>
答案 1 :(得分: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>
答案 2 :(得分:0)
验证器仅附加一个触发事件。如果要触发更多事件,则必须添加更多验证器,其中源是相同的字段,但您更改了eventTrigger属性。
所以,你有:
<mx:StringValidator source="{myTextInput}"
property="text"
triggerEvent="{TextEvent.TEXT_INPUT}"/>
和
<mx:StringValidator source="{myTextInput}"
property="text"
triggerEvent="{FocusEvent.FOCUS_OUT}"/>.
恕我直言,我只在focusOut上添加一个验证器,所以你让免费用户写下每个人的情节,但当你离开控件时,你会做所有的检查和验证。
答案 3 :(得分:0)
TextEvent.TEXT_INPUT无法检测退格并删除关键事件。请改用Event.CHANGE。