|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Apr 2011
Сообщений: 3
|
событие change на созданном кадре (attachMovie)
Я новичок во Flash, от того могу неверно пользоваться терминологией и т.п. Однако...
Задача: Есть кнопка "Добавить". Она создаёт Кадр, в кадре есть TextInput. Нужно при создании этого Кадра (при нажатии кнопки "Добавить") повесить слушателя события change (addEventListener). Проблема: Слушатель события change хорошо работает на статическом (заранее созданном) кадре, но если вешать слушатель на денамически созданный Кадр (как описано в задаче), он не работает. Вопрос: Как повесть слушателя события change на TextInput в динамически созданном кадре? Для ясности код: //ф-я выполняется по нажатию кнопки "Добавить" function _add_perelet(){ //Создаем новый Кадр (в нём есть TextInput new_perelet.from) var new_perelet = perelet_group.attachMovie( "perelet", "perelet"+new_name, perelet_group.getNextHighestDepth(), {_x:0,_y:h} ); var from_listener:Object = new Object(); from_listener.change = function(e:Object):Void { new_perelet.err_from._visible = false; }; // Добавляем слушатель события change к элементу TextInput, НО этого события не наступает! Почему? new_perelet.from.addEventListener('change', from_listener); } |
|
|||||
Модрон-ветеринар
|
1. new_perelet.from. - где слушателя пытаетесь добавить - это верно, не ошибка?
2. Залезаем в хелп по AS2, смотрим, видим, что для TextField есть такие варианты: this.createTextField("my_txt", this.getNextHighestDepth(), 10, 10, 100, 22); my_txt.border = true; my_txt.type = "input"; //вариант 1 my_txt.onChanged = function(textfield_txt:TextField) { trace(textfield_txt._name + " changed"); trace(this + " changed"); }; //вариант 2 var txtListener:Object = new Object(); txtListener.onChanged = function(textfield_txt:TextField) { trace(textfield_txt._name+ " changed and notified myListener"); }; my_txt.addListener(txtListener); С динамически созданным мувиком (не кадром) все прекрасно будет работать.
__________________
Идите первым! Последний раз редактировалось mooncar; 21.04.2011 в 00:31. |
|
|||||
Регистрация: Apr 2011
Сообщений: 3
|
1. Нет, это не ошибка. Логика такая: new_perelet.from - это TextInput. Когда он пустой, становится видна рамка (new_perelet.err_from) вокруг него. Как только пользователь начинает вводить текст в new_perelet.from, рамка new_perelet.err_from должна исчезнуть.
2.Вы показываете мне выдержки из хелпа для TextField, а у меня задача повесить слушатель к TextInput. В этом случае ни один из предложенных вариантов, к сожалению, не работает. |
|
|||||
Модрон-ветеринар
|
Да, извините, не понял.
Это н-ся компонент TextInput. Вот так, например, будет работать, с использованием крошечной задержки: _add_perelet(); function _add_perelet() { var new_perelet:MovieClip = _root.attachMovie('perelet', 'perelet' + new_name, _root.getNextHighestDepth(), {_x:0,_y:h}); var from_listener:Object = new Object(); from_listener.change = function(eventObject:Object) { trace('Изменен'); }; setTimeout(addLst, 1, new_perelet.from, from_listener); //задержка в 1mc } function addLst (ti:Object, obj:Object) { ti.addEventListener('change', obj); }
__________________
Идите первым! Последний раз редактировалось mooncar; 21.04.2011 в 15:05. |
|
|||||
Регистрация: Apr 2011
Сообщений: 3
|
Примите охапку из благодарности, респекта и уважухи за:
1. мувик 2. компонент 3. и конечно же за setTimeout Последняя просьба: объясните, почему в данном случае необходима была задержка и дайте, если это возможно, ссылку по теме. |
|
|||||
Модрон-ветеринар
|
К сожалению, ссылки не дам, сам установил когда-то опытным путем, что при аттачменте объектов с компонентами внутри, свойства последних, их события и методы не становятся мгновенно доступными с того же главного таймлайна.
__________________
Идите первым! Последний раз редактировалось mooncar; 21.04.2011 в 15:31. |
Часовой пояс GMT +4, время: 12:45. |
|
« Предыдущая тема | Следующая тема » |
Теги |
addeventlistener , attachmovie , change |
|
|