![]() |
дважды обработать событие
Есть некоторый контейнер, в котором находятся другие объекты, в которых в свою очередь могут находиться другие объекты. На контейнере есть мышиное событие mouseDown.
Задача: если мы кликаем по объекту, который не содержит других вложенных объектов в месте клика, то событие у нас вызывается один раз, а если мы к примеру попадаем по объекту, который находится в одном из объектов, который расположен в контейнере (м-дя, завернул...), то необходимо получить 2 событие с e.target в одном случае в виде самого объекта, а в другом - в виде того объекта, который находится в последнем. Знаю, что дело в фазах события, но что-то не получается сообразить как это реализовать. Заранее спасибо. ЗЫ. можно было бы через parent, но хотелось бы с соблюдением ООП-шности... |
Чтобы прослушивать событие во всех трех фазах, необходимо вызвать addEventListener дважды: один раз с useCapture в значении true, а другой — с useCapture в значении false.
|
У меня такая примерно иерархия: container(на нем слушатели)-объект(контейнер для вложенных объектов)-объекты последнего уровня(теоретически могут быть контейнерами, но на данный момент - нет)
Код AS3:
При этом отслеживаю e.target и e.currentTarget. В трйсе выводится container и объект последнего уровня, но не тот, который находится между ними. Что я делаю не правильно, как мне в событиии до него достучаться, имея события только на контейнере? Вешать непосредственно на этот объект не хочу, т.к. подобных может быть бесконечно большое количество. |
Не понял, для чего вы подписываетесь по 3 раза с разным приоритетом? Событие все равно придет один раз для данной фазы.
event.currentTarget - тот кого слушаем, то есть всегда ваш container. event.target - тот кто инициировал событие в цепочке списка отображения. Итого, если в container лежит еще container2, а в нем object, то при клике на object - в событии получим event.target == object. Тут все нормально и ошибки тут нет. То что вы описали сделать не получится, да и непонятно зачем? Если пришло событие от ребенка, всегда можно узнать есть ли у него родитель и является ли он родителем верхнего уровня. |
всем объектам поприсваивайте name для идентификации и затем
Код AS3:
там на самом деле все очень просто |
Код:
Не понял, для чего вы подписываетесь по 3 раза с разным приоритетомСпасбо, за отзывы, задача решена другим способом. Судя по всему изначально был выбран неправильный подход к формированию структуры. |
| Часовой пояс GMT +4, время: 22:22. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.