[英]How to confirm text input in Flex actionscript
输入数字后,我可以侦听哪些TextInput事件以引发警报? 场景是:用户在myTxt1中输入数字。 出现一条警报,提示“您确定要输入该号码吗?”。 如果用户单击“是”,则什么也不做/继续。 如果用户单击“否”,请将焦点放在myTxt1上,以便他可以更改数字。
问题是,我不知道该听什么事件来引发警报。 我尝试过valueCommit和focusOut。 通过这两种方式,都会显示警报,但是当用户单击“是”时,即使事件是由用户单击myTxt2触发的,焦点仍然停留在myTxt1上。 用户尝试离开myTxt1,但看到警告,单击“是”,焦点仍停留在myTxt1上,这是一个恶性循环。
这似乎是一个简单的问题,但我无法弄清楚。 有什么建议吗?
在focusOut处理程序中,您必须存储将要获得焦点的对象。 这是因为当您显示警报时,此信息已消失,因为“警报”窗口现在已成为焦点。 请参阅以下示例,了解如何正确执行此操作。 我建议您构建自己的自定义组件,为您完成所有工作...
<?xml version="1.0" encoding="utf-8"?>
<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.controls.Alert;
import mx.events.CloseEvent;
import mx.managers.FocusManager;
protected var previousValue:String;
protected var nextValue:String;
protected var focusInObject:InteractiveObject;
protected function isNumber(value:String):Boolean
{
// do your check
return true;
}
protected function textInput_focusOutHandler(event:FocusEvent):void
{
var value:String = TextInput(event.currentTarget).text;
if (!isNumber(value) || value == previousValue)
return;
nextValue = value;
focusInObject = event.relatedObject;
Alert.show("Are you sure you want to enter that number?", "", Alert.YES | Alert.NO, this, alertCloseHandler);
}
protected function alertCloseHandler(event:CloseEvent):void
{
if (event.detail == Alert.NO)
return;
previousValue = nextValue;
if (focusInObject)
systemManager.stage.focus = focusInObject;
}
]]>
</fx:Script>
<s:layout>
<s:VerticalLayout/>
</s:layout>
<s:TextInput focusOut="textInput_focusOutHandler(event)"/>
<s:CheckBox label="Foo"/>
<s:Button label="Bar"/>
</s:Application>
我包括一个小的优化。 如果用户按“是”,则应用程序会记住该值。 如果您收到另一个focusOut事件,并且自上次以来该值未发生变化,则不会显示该警报。
如果它是TextArea组件,则可以侦听change事件。 如果文本区域中有任何更改,则将触发更改事件。 然后,您可以检查按下了哪个键。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.