![]() |
|
||||||||||
|
|
|
|||||
|
вопрос снят.
Вопрос другого плана. Если кнопка подписана на 2 события клика, и одно из событий было удалено, то при нажатии все равно срабатывают оба. Как разрешить срабатывать только тому, которое не было удалено?! ( какой нить там preventDefault )
__________________
Марк Tween Последний раз редактировалось in4core; 14.10.2012 в 02:54. |
|
|||||
|
т.е. после removeEventListener обработчик всё равно продолжает срабатывать?
__________________
adobe AS3 manual |
|
|||||
|
Регистрация: Apr 2012
Сообщений: 239
|
stopPropogation()
|
|
|||||
|
Регистрация: Jul 2007
Сообщений: 393
|
Событие нельзя "удалить". Можно удалить слушатель, если он удален правильно-срабатывать не будет
preventDefault-предотвращает действие "по умолчанию", для ввода текста, например, отменяет ввод текста. stopPropogation() отменяет всплытие. Что точно вам надо? |
|
|||||
|
Цитата:
Цитата:
__________________
Марк Tween |
|
|||||
|
Регистрация: May 2012
Сообщений: 131
|
Цитата:
|
|
|||||
|
Регистрация: Aug 2008
Адрес: Рязань
Сообщений: 723
|
насколько я понял у тебя обычный баблинг происходит, stopPropogation() в первом листенере пропиши
__________________
low + |
|
|||||
|
Frost47rus - мне кажется Вы Алеша! - или Вася - неважно.
Цитата:
Jewelz - видимо, хотя помоему, я проверял, баблинг выставлен в false. Может не доглядел. Все равно интересно, давай порассуждаем . CLICK , CLICK - c первого сняли. ( тоесть внутренний ) - раз мы его сняли , то причем тут баблинг? - его уже нет. Остался внешний , получается внешний может баблится как наверх так и вниз? - если так, я походу нуб, и учить мат часть мне! Но насколько я помню баблится - вверх. Добавлено через 53 секунды Frost47rus - мне кажется Вы Алеша! - или Вася - неважно. Цитата:
Jewelz - видимо, хотя помоему, я проверял, баблинг выставлен в false. Может не доглядел. Все равно интересно, давай порассуждаем . CLICK , CLICK - c первого сняли. ( тоесть внутренний ) - раз мы его сняли , то причем тут баблинг? - его уже нет. Остался внешний , получается внешний может баблится как наверх так и вниз? - если так, я походу нуб, и учить мат часть мне! Но насколько я помню баблится - вверх.
__________________
Марк Tween |
|
|||||
|
Регистрация: May 2012
Сообщений: 131
|
Цитата:
листенер на клик у кнопки - один! =) листенер на лэйауте - это листенер на лэйауте, но не на кнопке. и внутренний клик эвент в кнопке всего лишь диспетчит какое-либо событие, как правило такое же. извне - слушатель на одно событие - один. не надо пудрить людям мозги. этот форум будут читать и новички - а вы им мозги запудриваете. Добавлено через 42 минуты Вот вам пример стандартной кнопки. Создаётся такая кнопка в Flash CS ручками послойно из графических ресурсов. Отрисовывается hitArea для каждой, если кнопки разные. Соответственно, имена полей - так же проставляются вручную ( по дефолту - 4 лейбла на 4 кадрах, 1 - для hitArea, 1 - для текстового поля. Вешаются листенеры на такую кнопку как и на обычный SimpleButton. package ru.domain.project.view.gui.buttons { import flash.display.*; import flash.events.*; import flash.text.*; /** * ... * @author Frost */ public class MyButton extends EventDispatcher { private var hitArea:MovieClip; private var layout:MovieClip; private var _enabled:Boolean; public function MyButton(mc:MovieClip) { layout = mc; if (layout.getChildByName('hit') == null) { trace('MYBTN_ERROR: Cant find hit layer in MovieClip: ' + mc.name); return; } hitArea = layout.getChildByName('hit') as MovieClip; enabled = true; } private function turnOn():void { hitArea.buttonMode = true; hitArea.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); hitArea.addEventListener(MouseEvent.ROLL_OVER, onRollOver); hitArea.addEventListener(MouseEvent.ROLL_OUT, onRollOut); hitArea.addEventListener(MouseEvent.MOUSE_UP, onMouseUp); hitArea.addEventListener(MouseEvent.CLICK, onClick); layout.gotoAndStop('up'); } private function turnOff():void { hitArea.buttonMode = false; hitArea.removeEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); hitArea.removeEventListener(MouseEvent.ROLL_OVER, onRollOver); hitArea.removeEventListener(MouseEvent.ROLL_OUT, onRollOut); hitArea.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp); hitArea.removeEventListener(MouseEvent.CLICK, onClick); layout.gotoAndStop('disabled'); } public function get enabled():Boolean { return _enabled; } public function set enabled(val:Boolean):void { _enabled = val; (_enabled == true) ? turnOn() : turnOff(); } public function text(txt:String):void { var tf:TextField = layout.getChildByName('tf') as TextField; formatTextField(tf, txt); } private function formatTextField(tf:TextField, e:String):void { tf.text = e; tf.selectable = false; //some other format settings } private function onClick(e:MouseEvent):void { dispatchEvent(new MouseEvent(MouseEvent.CLICK)); } private function onRollOver(e:MouseEvent):void { layout.gotoAndStop('over'); dispatchEvent(new MouseEvent(MouseEvent.ROLL_OVER)); } private function onRollOut(e:MouseEvent):void { layout.gotoAndStop('up'); dispatchEvent(new MouseEvent(MouseEvent.ROLL_OUT)); } private function onMouseUp(e:MouseEvent):void { layout.gotoAndStop('up'); } private function onMouseDown(e:MouseEvent):void { layout.gotoAndStop('down'); } } } |
|
|||||
|
вообще-то если кнопка дважды подписана на событие клика, и один из обработчиков был удален, то при нажатии срабатывает только тот, что остался
package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; public class Main extends Sprite { public function Main():void { var but:But = new But(); but.addEventListener(MouseEvent.CLICK, but_click); addChild(but); } private function but_click(e:MouseEvent):void { trace("Main.but_click > e : " + e); } } } import flash.display.Sprite; import flash.events.MouseEvent; class But extends Sprite { public function But() { graphics.beginFill(0x008000); graphics.drawRect(0, 0, 50, 50); this.addEventListener(MouseEvent.CLICK, this_click); } private function this_click(e:MouseEvent):void { trace("But.this_click > e : " + e); // удаляем (и больше этого трейса не видим) this.removeEventListener(MouseEvent.CLICK, this_click); } } пример м.б. ? |
![]() |
![]() |
Часовой пояс GMT +4, время: 23:22. |
|
|
« Предыдущая тема | Следующая тема » |
|
|