2009-12-29 2 views
0

У меня есть текстовое поле и кнопка - Я хочу кнопку, чтобы исчезнуть, когда пользователь щелкает где-нибудь в окне приложения КРОМЕ кнопку «Отправить»Отключить TextArea аля Facebook при нажатии вне TextArea

<mx:Button x="306" y="168" label="Button" id="btn" click="Alert.show('Button clicked')"/> 
<mx:TextArea x="138" y="146" focusOut="btn.visible=false" focusIn="btn.visible=true"/> 

Я пытался дозвониться btn.visible = false, когда TextArea теряет фокус (с использованием события focusOut) - если я нажимаю в любом месте приложения, это работает, но оно также работает, когда я нажимаю кнопку - событие TextArea focusOut обрабатывается первым, а клик для кнопки позже - может кто-то, пожалуйста, помогите с этим?

Спасибо!

ответ

0

Я ранее говорил использовать звонок позже, но при тестировании он не работает, извините за то, что тратил время. Вместо этого вам нужно использовать диспетчер фокуса что-то вроде этого: я проверил это, и он кажется твердым.

<?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; 
    import mx.managers.FocusManager; //pull in the manager 

    private function onFocusOut(event:FocusEvent):void{ 
      if(getFocus() != null){ //in case focus goes outside the flash player 
       if(getFocus().name == "btn"){ //the focus went to the item with the ID "btn" 
        return; //do nothing, let the click handler work 
       }else{ //any other item gets focus 
        btn.visible=false; //disappear 
       } 
      } 
     } 

    private function clickHandler():void{ // made it it's own function so do more than just alert 
     Alert.show('Button clicked'); 
     btn.visible=false; 
    } 
]]> 
</mx:Script> 

    <mx:Button x="306" y="168" label="Button" id="btn" click="clickHandler();"/> 
    <mx:TextArea x="138" y="146" focusOut="onFocusOut(event)" focusIn="btn.visible=true"/> 

</mx:Application> 
+0

Извините, не удается скомпилировать этот код, получить синтаксические ошибки .. исправление их приводит к большему количеству ... – sami

+0

Я был типичным Если бы я заглянул в нее, мне нужно было добавить функцию внутри callLater. Обновленный пример должен работать. – invertedSpear

+0

hmm, nopes invertedSpear, извините, это тоже не работает. Я обновляю код ниже ... – sami

0

Вы пытались переопределить обработчик focusOut по умолчанию? Это не работает ...

private function setBtnNotVisible():void 
{ 
    btn.visible=false; 
} 
override protected function focusOutHandler(event:FocusEvent):void 
{ 
    callLater(setBtnNotVisible); 
} 

Ни делает писать свой собственный обработчик события ...

private function setBtnNotVisible():void 
{ 
    btn.visible=false; 
} 
private function focusOutHandler2(event:FocusEvent):void 
{ 
    callLater(setBtnNotVisible); 
} 

------------------ --- Полный код ------------------

##### Попробуйте щелкнуть ВНУТРИ textArea, а затем на кнопке, я не могу поймать предупреждение
<?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; 

    private function onFocusOut(event:FocusEvent):void{ 
      callLater(
       function():void{ 
        btn.visible=false; 
       } 
      ) 
     } 
]]> 
</mx:Script> 

    <mx:Button x="306" y="168" label="Button" id="btn" click="Alert.show('Button clicked')"/> 
    <mx:TextArea x="138" y="146" focusOut="onFocusOut(event)" focusIn="btn.visible=true"/> 

</mx:Application> 
Смежные вопросы