Проблема с фокусом в AS3

У меня есть текст по умолчанию в tlftextfield, который нужно удалить при первом (!) Щелчке по нему для ввода некоторого собственного текста. Однако текстовое поле теряет фокус, когда я присоединяю функцию к FocusEvent.FOCUS_IN. Вот что у меня есть на данный момент:

function clearField(event:FocusEvent) {
    if (event.currentTarget.text == defaultText[event.currentTarget.name]) {
        event.currentTarget.text="";
        event.currentTarget.textFlow.interactionManager.setFocus();
    }
}

Обработчик прикрепляется следующим образом:

rmDiagnose.txtDiagnose.addEventListener(FocusEvent.FOCUS_IN, clearField);

Что мне здесь не хватает?


person Jan    schedule 06.08.2013    source источник


Ответы (1)


Вы используете setFocus() метод диспетчера взаимодействия (ISelectionManager). Обратите внимание, что в документации говорится, что этот метод предназначен для установки фокуса на контейнер, содержащий выделенный текст.

Этот метод специально работает с текстом, который вы выбрали с помощью мыши. И в вашем сценарии нет выделенного текста.

Поэтому вместо этого просто используйте обычные средства для сфокусировать объект. В твоем случае:

stage.focus = InteractiveObject(event.currentTarget); 
person Sunil D.    schedule 06.08.2013
comment
Спасибо, Сунил. Однако это тоже не работает: неявное приведение значения статического типа Object к, возможно, несвязанному типу flash.display: InteractiveObject. Когда я конвертирую его в интерактивный объект, он запускается (без ошибок при компиляции), но тоже не работает. Какие-либо предложения? - person Jan; 07.08.2013
comment
Оппс, моя плохая! Вам определенно нужно преобразовать event.currentTarget в InteractiveObject. Чтобы понять, почему это не работает после этого, вы можете подтвердить, что такое event.currentTarget? И / или покажите, как вы прикрепляете прослушиватель событий? Наконец, если у вас есть ссылка на текстовое поле, вы можете попытаться сфокусировать его вместо этого: stage.focus = myTextField. - person Sunil D.; 07.08.2013
comment
Спасибо, Сунил, за вашу постоянную поддержку, очень признателен. Я изменил код, как вы предлагали, но все равно безуспешно. Вы можете просмотреть SWF-файл в Интернете по адресу rexmedicus.com/assets/diagnosendose.swf и подождите пока не появится коричневая записная книжка с надписью Differentialdiagnosen? и Untersuchungen ?. Это текстовые поля, о которых идет речь. Когда вы нажимаете на них, текст исчезает, но фокус неправильный, поэтому вам нужно щелкнуть еще раз, чтобы написать sth. Странный. - person Jan; 08.08.2013