Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 20.04.2011, 22:56
Bolmazov вне форума Посмотреть профиль Отправить личное сообщение для Bolmazov Найти все сообщения от Bolmazov
  № 1  
Ответить с цитированием
Bolmazov

Регистрация: Apr 2011
Сообщений: 3
По умолчанию событие change на созданном кадре (attachMovie)

Я новичок во Flash, от того могу неверно пользоваться терминологией и т.п. Однако...

Задача:
Есть кнопка "Добавить". Она создаёт Кадр, в кадре есть TextInput. Нужно при создании этого Кадра (при нажатии кнопки "Добавить") повесить слушателя события change (addEventListener).
Проблема:
Слушатель события change хорошо работает на статическом (заранее созданном) кадре, но если вешать слушатель на денамически созданный Кадр (как описано в задаче), он не работает.
Вопрос:
Как повесть слушателя события change на TextInput в динамически созданном кадре?

Для ясности код:

Код AS1/AS2:
//ф-я выполняется по нажатию кнопки "Добавить"
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);
}

Старый 21.04.2011, 00:13
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 2  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
1. new_perelet.from. - где слушателя пытаетесь добавить - это верно, не ошибка?

2. Залезаем в хелп по AS2, смотрим, видим, что для TextField есть такие варианты:
Код AS1/AS2:
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);
Я бы выбрал 1-й вариант, без лишнего слушателя. Как-то так:
Код AS1/AS2:
function _add_perelet()
{
	var new_perelet:MovieClip = perelet_group.attachMovie('perelet', 'perelet' + new_name, perelet_group.getNextHighestDepth(), {_x:0,_y:h});
 
	new_perelet.err_from.onChanged = function() 
	{
	  trace(this + ' changed,  new text:' + this.text);
	};
}
С динамически созданным мувиком (не кадром) все прекрасно будет работать.
__________________
Идите первым!


Последний раз редактировалось mooncar; 21.04.2011 в 00:31.
Старый 21.04.2011, 14:02
Bolmazov вне форума Посмотреть профиль Отправить личное сообщение для Bolmazov Найти все сообщения от Bolmazov
  № 3  
Ответить с цитированием
Bolmazov

Регистрация: Apr 2011
Сообщений: 3
1. Нет, это не ошибка. Логика такая: new_perelet.from - это TextInput. Когда он пустой, становится видна рамка (new_perelet.err_from) вокруг него. Как только пользователь начинает вводить текст в new_perelet.from, рамка new_perelet.err_from должна исчезнуть.
2.Вы показываете мне выдержки из хелпа для TextField, а у меня задача повесить слушатель к TextInput. В этом случае ни один из предложенных вариантов, к сожалению, не работает.

Старый 21.04.2011, 14:59
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 4  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Да, извините, не понял.
Это н-ся компонент TextInput.
Вот так, например, будет работать, с использованием крошечной задержки:
Код AS1/AS2:
_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.
Старый 21.04.2011, 15:22
Bolmazov вне форума Посмотреть профиль Отправить личное сообщение для Bolmazov Найти все сообщения от Bolmazov
  № 5  
Ответить с цитированием
Bolmazov

Регистрация: Apr 2011
Сообщений: 3
Примите охапку из благодарности, респекта и уважухи за:
1. мувик
2. компонент
3. и конечно же за setTimeout

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

Старый 21.04.2011, 15:28
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 6  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
К сожалению, ссылки не дам, сам установил когда-то опытным путем, что при аттачменте объектов с компонентами внутри, свойства последних, их события и методы не становятся мгновенно доступными с того же главного таймлайна.
__________________
Идите первым!


Последний раз редактировалось mooncar; 21.04.2011 в 15:31.
Создать новую тему Ответ Часовой пояс GMT +4, время: 22:59.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
addeventlistener , attachmovie , change
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 22:59.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.