среда, марта 12, 2008

Грабли с фокусом, при совместной работе TextField и активных клипов. AS2

При разработке небольшого фреймворка (без подробностей), столкнулся с проблемой. Заключалась она в следующем:
По нажатию на некоторые активные клипы, открывались окна с TextField.
Текстовые поля:

  • были в режиме selectable=true,
  • имели в себе HTML-ссылки,
  • были в режиме type="input"
После клика на них, нарушалось поведение активных клипов при отжатии. После отжатия активировалось событие rollOut, и в дальнейшем, это распространялось на все (или почти все - в неуловимой закономерности) активные элементы.

Решение проблемы оказалось простым:
Необходимо при обработке события onPress установить фокус на этот элемент:
Selection.setFocus(active_clip);

Для того, чтобы не появлялся желтый прямоугольник фокуса, необходимо определить: active_clip._focusrect=false;

* * *

Позже выяснилось, что в момент установки Selection.setFocus(active_clip);, возникает другой баг - при нажатии на active_clip в некоторых ситуациях после onPress срабатывает сразу onReleaseOutside (т.е. кнопка мыши нажата, но событие отжатия отрабатывает). Компромисс - проверять, является ли этот клип в фокусе, и если нет, то устанавливать активность на него.
if (eval(Selection.getFocus())!=this.__active_clip) Selection.setFocus(this.__active_clip);

Комментариев нет: