Избегайте события FocusOut, инициируемого, когда приложение теряет фокус - PullRequest
2 голосов
/ 16 сентября 2010

Я сделал переопределение стандартного компонента TextInput
В этом компоненте у меня есть:

addEventListener( FocusEvent.FOCUS_OUT, handleFocusOut ); 
  • Мой метод срабатывает, когда поле теряет фокус для другого поля (приятно)
  • Проблема: она запускается также, когда все гибкое приложение теряет фокус (когда мое поле имеет текущий фокус внутри моей формы)

Вопросы:

  • Что я сделал не так?
  • Есть ли способ избежать выполнения каких-либо действий, когда это событие application-focusout?

С уважением

Ответы [ 3 ]

0 голосов
/ 21 сентября 2010

Спасибо за вашу помощь!
Вот что я сделал в своем компоненте (textinput child)

Добавить два обработчика событий:
- addEventListener (Event.ACTIVATE, handleEventActivate);
- addEventListener (Event.DEACTIVATE, handleEventDeActivate);

Они обновляют внутреннее поле _isApplicationActive
Я обрабатываю событие focusOut:
addEventListener (FocusEvent.FOCUS_OUT, handleFocusOut);
в методе у меня
if (! _isApplicationActive) {event.stopImmediatePropagation (); }

При этом мои функции обработки focusOut не вызываются, когда приложение деактивировано. Потому что => события DECACTIVATE вызываются до событий FocusOut!

0 голосов
/ 24 мая 2016

Простой ответ - проверить, является ли event.relatedObject (объект, получающий фокус) нулевым. FocusManager Flex очень старается, чтобы некоторый гибкий объект имел фокус (flex), поэтому в противном случае он не должен быть нулевым.

Также проверьте isRelatedObjectInaccessible, если вам может понадобиться.

0 голосов
/ 16 сентября 2010

Я не уверен, почему это ведет себя так.Но одним из решений может быть использование eventListener для события FOCUS_OUT на уровне приложения и вызов stopImmediatePropagation().

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