Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Одновременное выполнение двух событий. (http://www.flasher.ru/forum/showthread.php?t=118846)

AZOTe 05.12.2008 11:33

Одновременное выполнение двух событий.
 
Есть несколько компонентов radioButton и один textArea, который активируется при выборе определенной радиокнопки. В массив записывается значение выбранной кнопки, либо текст из textArea.

Использую событие click для проверки статуса радиокнопок и событие change для textArea. Выполняется только change.

Код:

var bb:Array = Array();

var checkboxListener:Object = new Object();
var taListener:Object = new Object();

checkboxListener.click = function(evt_obj:Object) {
taListener.change = function(evt_obj:Object) {
        if (rb5.selected) {bb[0] = rb5.label + newline;}
        else {bb[0] = "";}
        if (rb6.selected) {bb[1] = rb6.label + newline;}
        else {bb[1] = "";}
        if (rb7.selected) {bb[2] = rb7.label + newline;}
        else {bb[2] = "";}
        if (rb8.selected) {bb[3] = rb8.label + newline;}
        else {bb[3] = "";}
        if (rb9.selected) {bb[4] = rb9.label + newline;}
        else {bb[4] = "";}
        if (rb10.selected) {bb[5] = evt_obj.target.text + newline;}
        else {bb[5] = "";}
        };
};
textArea0.addEventListener("change", taListener);
rb5.addEventListener("click", checkboxListener);
rb6.addEventListener("click", checkboxListener);
rb7.addEventListener("click", checkboxListener);
rb8.addEventListener("click", checkboxListener);
rb9.addEventListener("click", checkboxListener);
rb10.addEventListener("click", checkboxListener);

Что нужно сделать чтобы выполнялись оба события?

alexcon314 05.12.2008 12:00

Ну, радиобаттонам так события не назначаются. Там назначаются события на всю группу этих кнопок.
Код:

var listenerObject:Object = new Object();
listenerObject.click = function(eventObj:Object) {
    // ...
};
radioButtonGroup.addEventListener("click", listenerObject);

Ваш код скорее для чекбокса. Или вы и имели его в виду изначально?
Не ясно, а что должно происходить при click? Тоже самое что ли?
Код:

function myevent(evt_obj:Object) {
        trace(evt_obj.target._name);
        trace(chkb1.selected);
        trace(chkb2.selected);
}
ta.addEventListener("change", this.myevent);
chkb1.addEventListener("click", this.myevent);
chkb2.addEventListener("click", this.myevent);


iNils 05.12.2008 12:04

Во-первых, забудьте про определение функции внутри функции. Каждый раз, нажимая на радиобаттон, вы переопределяете taListener.change. Используйте флаг состояния.
Во-вторых, забудьте про создание бесполезных new Object();, у вас уже есть текущий объект, его достаточно.
В третьих, у вас избыточное число else.
Код AS1/AS2:

var bb:Array = Array ();
var flag:Boolean = false;
var id:Number = 0;
function click (evt_obj:Object) {
        flag = true;
}
function change (evt_obj:Object) {
        if (flag) {
                bb[id] = "";
                if (rb5.selected) {
                        bb[0] = rb5.label + newline;
                        id = 0;
                } else if (rb6.selected) {
                        bb[1] = rb6.label + newline;
                        id = 1;
                } else if (rb7.selected) {
                        bb[2] = rb7.label + newline;
                        id = 2;
                } else if (rb8.selected) {
                        bb[3] = rb8.label + newline;
                        id = 3;
                } else if (rb9.selected) {
                        bb[4] = rb9.label + newline;
                        id = 4;
                } else if (rb10.selected) {
                        bb[5] = evt_obj.target.text + newline;
                        id = 5;
                }
                trace (bb);
        }
}
textArea0.addEventListener ("change", this);
rb5.addEventListener ("click", this);
rb6.addEventListener ("click", this);
rb7.addEventListener ("click", this);
rb8.addEventListener ("click", this);
rb9.addEventListener ("click", this);
rb10.addEventListener ("click", this);


AZOTe 05.12.2008 13:49

Alexcon314, iNils, спасибо за помощь! Все заработало!

Код:

var bb:Array = Array();

function myevent(evt_obj:Object) {
        if (rb5.selected) {bb[0] = rb5.label + newline;}
        else {bb[0] = "";}
        if (rb6.selected) {bb[1] = rb6.label + newline;}
        else {bb[1] = "";}
        if (rb7.selected) {bb[2] = rb7.label + newline;}
        else {bb[2] = "";}
        if (rb8.selected) {bb[3] = rb8.label + newline;}
        else {bb[3] = "";}
        if (rb9.selected) {bb[4] = rb9.label + newline;}
        else {bb[4] = "";}
        if (rb10.selected) {bb[5] = evt_obj.target.text + newline;}
        else {bb[5] = "";}
        };
change = myevent;
click = myevent;
textArea0.addEventListener("change", this);
radioGroup.addEventListener("click", this);



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

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