繁体   English   中英

如何在Flex操作脚本中确认文本输入

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM