2011-06-21 49 views
0

我是flash新手,下面是我的脚本,我有3个textinput框,name1,name2,name3和3个动态文本,output1,output2,output3。一旦用户输入框中的文本,它应该在动态输出文本中看起来完全相同。它适用于第一个,但不适用于第二个和第三个。我以不同的方式将changehandlers重命名为删除编译错误,但现在只有第一个可以工作。有没有更好的方式做到这一点,如果我想有多个文本主菜单?ActionScript 3.0 textInput和Display

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

您忘了在后两个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); 
+0

谢谢你好,先生,这个作品完美,但我觉得必须有一个更有效的方式来做到这一点,对于每个文本字段,我必须写这样一个,我可以做一个循环或类似的东西,以取得更好的结果。 – Victor

+1

查看更新。您可以使用类更好地完善这个功能,我可以更新它并举例说明。 – Marty

+0

循环没有错误,但似乎没有工作,当我在文本框中键入内容时,动态文本中没有任何更改(输出) – Victor