Actionscript 3 交互不是将输入文本转换为字符串

Actionscript 3 交互不是将输入文本转换为字符串,actionscript-3,text,input,actionscript,Actionscript 3,Text,Input,Actionscript,我需要一些帮助。首先,我有一个互动,你填写5个文本框,回答2个问题。5个答案中的每一个都必须作为输入文本填写,然后在单击“完成”按钮时对照可接受的回答数组进行检查。此外,字段中存在两种类型的差异。因此,前三个答案字段属于数组中一系列可接受的回答:类型a和类型B后面的两个问题。只要输入正确,就可以按任何顺序填写正确的回答 我似乎不明白为什么文本字段没有转换成字符串 import flash.text.TextField; import flash.events.MouseEvent; stop(

我需要一些帮助。首先,我有一个互动,你填写5个文本框,回答2个问题。5个答案中的每一个都必须作为输入文本填写,然后在单击“完成”按钮时对照可接受的回答数组进行检查。此外,字段中存在两种类型的差异。因此,前三个答案字段属于数组中一系列可接受的回答:类型a和类型B后面的两个问题。只要输入正确,就可以按任何顺序填写正确的回答

我似乎不明白为什么文本字段没有转换成字符串

import flash.text.TextField;
import flash.events.MouseEvent;

stop();


//*--------------------------------------------
//
//                  THINGS YOU CAN CHANGE
//
//*--------------------------------------------

var a_inputType:Array = new Array("Doggie Day Spa", "Deb's Dog Walking Service", "Pet Market", "Pampered Pet", "TLC Grooming");     //All recognized type responses, Type A listed before Type B
var n_typeA:Number = new Number(3);                                                                                                 //Sets the range for Type A


//*--------------------------------------------
//
//                  PAGE SETUP
//
//*--------------------------------------------

var n_typeB:Number = new Number(a_inputType.length - n_typeA +1);       //Finds the range of Type B
var a_testArray:Array = new Array();                                    //Holds push data from submit button

var a_correctArray:Array = new Array();                                 //Creates an array to run a final test against
for(var c = 0; c<=a_inputType.length-1; c++){                           //Loop populates the array
    a_correctArray.push(1);
}

var inputField1:TextField = new TextField();                            //Creates the Text Fields
var inputField2:TextField = new TextField();
var inputField3:TextField = new TextField();
var inputField4:TextField = new TextField();
var inputField5:TextField = new TextField();

var txtString1:String = new String();                                   //Creates the strings for translating the input text
var txtString2:String = new String();
var txtString3:String = new String();
var txtString4:String = new String();
var txtString5:String = new String();

for(var f = 1; f<=a_inputType.length; f++){                             //Assigns them properties, locations, and adds a listener for text
    var fieldBuilder = "inputField"+f;
    var fieldFinder = "txt_pos"+f;
    addChild(this[fieldBuilder]);
    this[fieldBuilder].border = false;
    this[fieldBuilder].width = 290;
    this[fieldBuilder].height = 25;
    this[fieldBuilder].x = this[fieldFinder].x;
    this[fieldBuilder].y = this[fieldFinder].y;
    this[fieldBuilder].type = "input";
    this[fieldBuilder].multiline = true;
    this[fieldBuilder].text = "";
    this[fieldBuilder].addEventListener(TextEvent.TEXT_INPUT, function (){
                             var stringBuilder = "txtString"+f;
                             this[stringBuilder] = this[fieldBuilder].text;
                             });
}


//*--------------------------------------------
//
//                  FUNCTIONS
//
//*--------------------------------------------

function SUBMIT(event:MouseEvent):void{                                 
    for(var t=1; t<=a_inputType.length; t++){                           //Loop establishes checks for each String against an input type
        if(t<=n_typeA){                                                 //if/else divides the textfields into two ranges: typeA and typeB
            checkTypeA(this["txtString"+t], a_inputType);               //sends the array of correct responses and the captured String to checkTypeA
        }else{
            checkTypeB(this["txtString"+t], a_inputType);               //sends the array of correct responses and the captured String to checkTypeB
        }
    }
    var TEMPSELECT = a_testArray.toString();                            //reduces the testArray recieving push data into a String
    var TEMPCORRECT = a_correctArray.toString();                        //reduces the correctArray from scene set-up into a String
    if(TEMPSELECT == TEMPCORRECT){                                      //compares the strings and determines a trace response
        trace("correct");
    }else{
        trace("incorrect");
    }
}

function checkTypeA(value:String, arr:Array){                           //Checks the String against all the array values within the specified range for type A
    for (var a=1; a<=n_typeA; a++){                                     //determines the range
        if (arr[a]==value){                                             //checks the value
            a_testArray.push(1);                                        //if true, generates a push value for a testArray to be checked later
        }
    }
}

function checkTypeB(value:String, arr:Array){                           
    for (var b = n_typeA; b<=n_typeB; b++){
        if (arr[b-1]==value){
            a_testArray.push(1);
        }
    }
}


//*--------------------------------------------
//
//                  BUTTONS
//
//*--------------------------------------------

done_bttn.addEventListener(MouseEvent.CLICK, SUBMIT);                   //Launches the SUBMIT function when "Done" is pressed.
等等。。。。如何停止这种循环行为。我尝试了if/else中断,但无效。

当您从本地函数调用该关键字时,该关键字的上下文会发生变化。如果将tracethis添加到匿名函数中,则可以轻松验证它。它将跟踪出[对象全局]。想到两种解决方案,将其引用存储在变量中:

var self:MovieClip = this;
for(var f = 1; f<=a_inputType.length; f++){      
    //...
    this[fieldBuilder].addEventListener(TextEvent.TEXT_INPUT, function (){
                             var stringBuilder = "txtString"+f;
                             self[stringBuilder] = self[fieldBuilder].text;
                             });
}
或声明一个新函数:

for(var f = 1; f<=a_inputType.length; f++){      
    //...
    this[fieldBuilder].addEventListener(TextEvent.TEXT_INPUT, myFunction);
}

function myFunction(t:TextEvent){
                         var stringBuilder = "txtString"+f;
                         this[stringBuilder] = (t.target as TextField).text;
}

这一变化根本不会改变我得到的回报。文本字段的跟踪仍然为空。尽管停止,您的movieclip是否仍在继续循环;一开始?事实证明,这是闪存文件本身的一种损坏。我复制到一个新的文件,现在一切都正常了。
for(var f = 1; f<=a_inputType.length; f++){      
    //...
    this[fieldBuilder].addEventListener(TextEvent.TEXT_INPUT, myFunction);
}

function myFunction(t:TextEvent){
                         var stringBuilder = "txtString"+f;
                         this[stringBuilder] = (t.target as TextField).text;
}