ActionScript 3.0 textInput и отображение - PullRequest
0 голосов
/ 21 июня 2011

Я новичок во флэш-памяти, ниже мой сценарий, у меня есть 3 поля ввода текста, name1, name2, name3 и 3 динамических текста, output1, output2, output3. Когда пользователь вводит текст в поле, он должен выглядеть точно так же в динамическом выводимом тексте. Он работает для первого, но не работает для второго и третьего. Я переименовал changehandlers по-другому, чтобы убрать ошибки компиляции, но теперь работает только первый. Есть ли лучший способ сделать это, если я хочу иметь несколько текстовых полей?

name1.addEventListener(Event.CHANGE, changeHandler);

function changeHandler(e:Event):void 
{
    output1.text = name1.text

}
name2.addEventListener(Event.CHANGE, changeHandler);

function changeHandler1(e:Event):void 
{
    output2.text = name2.text;
}

name3.addEventListener(Event.CHANGE, changeHandler);

function changeHandler2(e:Event):void 
{
    output3.text = name3.text;
}

1 Ответ

1 голос
/ 21 июня 2011

Вы забыли изменить имя функций прослушивателя в последних двух вызовах addEventListener(). В настоящее время он вызывает changeHandler() на всех трех событиях.

Вы должны иметь:

name2.addEventListener(Event.CHANGE, changeHandler1);
name3.addEventListener(Event.CHANGE, changeHandler2);

Вы можете создать класс, который управляет соединением входного текстового поля с выходным текстовым полем:

package
{
    import flash.text.TextField;
    import flash.events.Event;

    public class TextBinder extends Object
    {
        // vars
        private var _input:TextField;
        private var _output:TextField;

        /**
         * Joins input with output
         * @param inp The input text field
         * @param outp The output text field
         */
        public function join(inp:TextField, outp:TextField):void
        {
            _input = inp;
            _output = outp;

            _input.addEventListener(Event.CHANGE, _change);
        }

        /**
         * Event.CHANGE
         */
        private function _change(e:Event):void
        {
            _output.text = _input.text;
        }
    }
}

И теперь вы можете перебирать текстовые поля и присоединяться к ним, используя:

var tb:TextBinder = new TextBinder();
tb.join(name1, output1);
...