Предупреждение о том, что focusOut не может изменить фокус - PullRequest
0 голосов
/ 26 октября 2011

Вот функциональный пример:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    <mx:Script>
        <![CDATA[
            import mx.controls.Alert;
            public function go():void{              
                Alert.show("The focus will return to txtOne. Look: ");
            }
        ]]>
    </mx:Script>
    <mx:VBox>
        <mx:TextInput id="txtOne" text="1" focusOut="go()"/>
        <mx:TextInput id="txtTwo" text="2"/>    
    </mx:VBox>  
</mx:Application>

Когда вы переключаетесь с txtOne на txtTwo, появляется предупреждение, и после нажатия OK фокус возвращается к txtOne. Я не хочу, чтобы это случилось. Как это решить?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2013

Попробуйте также, чтобы фокусировка была направлена ​​туда, где этого хотел пользователь

<mx:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
            xmlns:mx="library://ns.adobe.com/flex/mx">
<fx:Script>
    <![CDATA[
        import mx.controls.Alert;
        import mx.events.CloseEvent;
        import mx.managers.IFocusManagerComponent;
        private var ignoreFocusChange:Boolean = false;

        private var focusTargetOnReturn: IFocusManagerComponent;

        public function go():void
        {

            if(!ignoreFocusChange){
                focusTargetOnReturn = focusManager.getFocus();

                Alert.show("The focus will not return to txtOne anymore. Look: ",
                    "", 0, null, myCloseHandler);
            }
        }

        private function myCloseHandler(event:CloseEvent):void
        {               
            ignoreFocusChange = true;
            focusManager.setFocus(focusTargetOnReturn);
            ignoreFocusChange = false;
        }
    ]]>
</fx:Script>
<mx:VBox>
    <mx:TextInput id="txtOne" text="1" focusOut="go()"/>
    <mx:TextInput id="txtTwo" text="2"/>    
</mx:VBox>  

0 голосов
/ 26 октября 2011

Alert.show имеет аргумент close callback, так что вы будете знать, когда он закрыт, и установите фокус на что-то другое. Обновление : у вас должен быть флаг, указывающий на возможность обработки события фокуса:

private var needAlert:Boolean = true;

public function go():void
{
    if (needAlert)
    {
        Alert.show("The focus will return to txtOne. Look: ",
            "", 0, null, myCloseHandler);
        needAlert = false;
    }
}

private function myCloseHandler(event:CloseEvent):void
{
    this.setFocus();
    needAlert = true;
}
...