Как подтвердить ввод текста в ActionScript Flex - PullRequest
0 голосов
/ 21 октября 2010

Какое событие TextInput можно прослушать, чтобы выдать оповещение при вводе числа?Сценарий таков: пользователь вводит число в myTxt1.Появляется предупреждение с надписью «Вы уверены, что хотите ввести этот номер?».Если пользователь нажимает Да, ничего не делать / продолжить.Если пользователь нажимает Нет, оставьте фокус на myTxt1, чтобы он мог изменить номер.

Проблема в том, что я не знаю, какое событие прослушать, чтобы выдать оповещение.Я пробовал valueCommit и focusOut.В обоих случаях отображается предупреждение, но когда пользователь нажимает кнопку Да, фокус остается на myTxt1, даже если событие было вызвано нажатием на myTxt2.Пользователь пытается выйти из myTxt1, но видит ALert, нажимает Да, фокус остается на myTxt1, и это порочный круг.

Это кажется простой проблемой, но я не могу понять это.Любой совет?

Ответы [ 3 ]

2 голосов
/ 21 октября 2010

Если вы пытаетесь запретить пользователю вводить числа или иным образом рассмотреть возможность использования свойства restrict . Но если вы просто хотите, чтобы пользователь был уведомлен о вводе номера, вы можете использовать событие change .

1 голос
/ 22 октября 2010

В вашем обработчике focusOut вы должны сохранить объект, который получит фокус.Это потому, что когда вы показываете Alert, эта информация исчезает, так как окно Alert теперь получает фокус.Смотрите следующий пример о том, как сделать это правильно.Я бы посоветовал вам создать свой собственный компонент, который сделает всю работу за вас ...

<?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 и значение не изменилось с прошлого раза, предупреждение не будет отображаться.

0 голосов
/ 25 октября 2010

Вы можете прослушивать событие изменения, если оно является компонентом TextArea. Если есть какие-либо изменения в текстовой области, то событие изменения будет запущено. Затем вы можете проверить, какая клавиша нажата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...