PDA

Просмотр полной версии : Selection.setFocus возвращает false


AzagThoth
08.04.2010, 09:52
Здравствуйте.

Если метод getFocus() покажет, что нужное поле не обладает фокусом ввода, его необходимо сделать выделенным программно. Для этого предназначен метод Selection.setFocus(object), где object — объект (это может быть текстовое поле, кнопка или клип), на который нужно навести фокус. Если задача методом Selection.setFocus() была решена успешно, он возвращает true. Иначе возвращается false.
Теперь мой код:
trace(Selection.getFocus());
trace(Selection.setFocus(test));//test динамическое текстовое поле на сцене
trace(Selection.getFocus());
А вот что вижу в оутпут:
null
false
_level0.test
Кто нибудь может объяснить почему false!?

in4core
08.04.2010, 13:03
Ну потому что оно изначально не установлено на test поле вот и false.

AzagThoth
08.04.2010, 16:31
Ничего подобного, Вы не правы.
trace(Selection.getFocus());
trace(Selection.setFocus(test));//test динамическое текстовое поле на сцене
trace(Selection.setFocus(test));
trace(Selection.getFocus());
В оутпут:
null
false
false
_level0.test
Вот так вот.

mooncar
08.04.2010, 21:31
Любопытно.
Действительно почему?
Ведь
Returns
Boolean - A Boolean value; true if the focus attempt is successful, false if it fails.

lexa2000lexa
09.04.2010, 11:06
незнаю почему так, но сталкивался с этим и поборол вот так trace(Selection.getFocus());
setTimeout(function (){Selection.setFocus(test)},100);//test динамическое текстовое поле на сцене
trace(Selection.setFocus(test));
setTimeout(function (){trace(Selection.getFocus())},150)

in4core
09.04.2010, 13:08
Ну так вот! Человек ставит интервалы доказывая мою точку зрения, что он не определен заранее а когда вы его определяете видимо встроен счетчик, в мс , через промежуток которого и выводится новое значение после установки старого. ТОка вот в хелпе об этом не написано

Hauts
09.04.2010, 13:21
Возможно интервал зависит от фпс флэшки.

lexa2000lexa
09.04.2010, 13:24
ну вот какая штука даже если поставить нулевые интервалы ,trace(Selection.getFocus());
setTimeout(function (){Selection.setFocus(test)},0);//test динамическое текстовое поле на сцене
trace(Selection.setFocus(test));
setTimeout(function (){trace(Selection.getFocus())},0) тоже работает, это попахивает глюком

in4core
09.04.2010, 13:41
Тогда возможно Haunts прав. а может недоработка флеша. А вообще зачем это нужно?

AzagThoth
09.04.2010, 16:24
Это нужно для того чтобы ПОНИМАТЬ как оно работает.

mooncar
09.04.2010, 18:45
Кажется, на установку фокуса тоже нужно определенное время (пресловутая "асинхронность"), как и на некоторые другие действия во флеше, по причине которого и были придуманы LoadVars и MovieClipLoader.
Но присоединюсь к топикстартеру - отчего тогда все-таки в хелпе, в частности, setFocus возвращает результат Action Script'у, а на деле - нет.