如何捕获在actionscript和flex中动态创建的textinput值?

时间:2012-05-24 08:11:32

标签: actionscript-3 flex

我已经使用actionscript动态创建了textinput但是当我从前端输入输入值并将其保存到db(文件)时,它只显示db中输入的最后一个值。 请帮忙

 for(var i:int=0;i<5;i++){
        var txt1:TextInput=new TextInput();
    txt1.width=88;
    createtxtinput(txt1);
    txt1.addEventListener(Event.CHANGE,test123(i,txt1))

var txt2:TextInput=new TextInput();
    txt2.width=88;
    createtxtinput(txt2);
    txt2.addEventListener(Event.CHANGE,test123(i,txt2))
  }

public function test123(x:int,txtmaterial:TextInput){
    return function(event){
    //  
        setValuestable2multi(x,txtmaterial.text);
//  Alert.show(x.toString());
    }

}

1 个答案:

答案 0 :(得分:1)

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
               xmlns:s="library://ns.adobe.com/flex/spark"
               creationComplete="_creationCompleteHandler(event)">

    <s:layout>
        <s:VerticalLayout />
    </s:layout>

    <fx:Script>
        <![CDATA[
        import flash.events.FocusEvent;
        import mx.events.FlexEvent;
        import spark.components.TextInput;
        import spark.events.TextOperationEvent;

        //---------------------------------------------------------------------
        //
        //  constants
        //
        //---------------------------------------------------------------------
        /**
         * @private
         * TextInput instances id prefix
         */
        private const TEXT_INPUT_ID_PREFIX:String = "textInput";

        //---------------------------------------------------------------------
        //
        //  private methods
        //
        //---------------------------------------------------------------------
        /**
         * @private
         * 
         * Create TextInput instances
         */
        private function _createTextInputs():void
        {
            var count:uint = 5;
            var textInput:TextInput;
            for (var i:uint; i < count; i++)
            {
                textInput = new TextInput();
                textInput.id = TEXT_INPUT_ID_PREFIX + i.toString();

                // listen TextOperationEvent.CHANGE event
                textInput.addEventListener(TextOperationEvent.CHANGE, _textInput_changeHandler);

                // or listen FocusEvent.FOCUS_OUT

                //textInput.addEventListener(FocusEvent.FOCUS_OUT, _textInput_focusOutHandler);
                addElement(textInput);
            }
        }

        /**
         * @private
         * 
         * Get TextInput instance index and value and pass in this values to "saving to database" method
         * 
         * @param   textInput TextInput instance
         */
        private function _handleChangesInTextInput(textInput:TextInput):void
        {
            var textInputIndex:int = parseInt(textInput.id.replace(TEXT_INPUT_ID_PREFIX, ""), 10);
            var textInputValue:String = textInput.text;

            _saveTextInputDataToDatabase(textInputIndex, textInputValue);
        }

        /**
         * @private
         * 
         * Mockup method for saving to database
         * 
         * @param   textInputIndex TextInput instance index
         * @param   textInputValue TextInput instace value
         */
        private function _saveTextInputDataToDatabase(textInputIndex:int, textInputValue:String):void
        {
            //TODO save data to database
        }

        //---------------------------------------------------------------------
        //
        //  handlers
        //
        //---------------------------------------------------------------------
        /**
         * @private
         * 
         * Application FlexEvent.CREATION_COMPLETE handler
         * 
         * @param   event
         */
        private function _creationCompleteHandler(event:FlexEvent):void
        {
            _createTextInputs();
        }

        /**
         * @private
         * 
         * TextInput instances TextOperationEvent.CHANGE handler
         * 
         * @param   event
         */
        private function _textInput_changeHandler(event:TextOperationEvent):void
        {
            _handleChangesInTextInput(TextInput(event.target));
        }

        /**
         * @private
         * 
         * TextInput instances FocusEvent.FOCUS_OUT handler
         * 
         * @param   event
         */
        private function _textInput_focusOutHandler(event:FocusEvent):void
        {
            _handleChangesInTextInput(TextInput(event.currentTarget));
        }
        ]]>
    </fx:Script>    
</s:Application>

如果您要监听TextOperationEvent.CHANGE事件,那么任何按键操作(当TextInput具有输入焦点时)将导致调用_handleChangesInTextInput方法。

如果您将侦听FocusEvent.FOCUS_OUT事件,则在某些TextInput将丢失输入焦点后将调用_handleChangesInTextInput方法。