0

我在文本框中使用 TextEvent.TEXT_INPUT 事件侦听器将框中的条目拆分为字符数组,但是当我尝试使用事件侦听器跟踪该数组时,它仅显示倒数第二个字符文本框。

例如:

我输入“你好”,输出给我“地狱”。然后我把它改成“helloq”,输出给我“hello”。

我该如何解决这个问题?我试过添加另一个只跟踪但没有区别的。谢谢。

代码(searchBox为文本框,splitSearch为数组):

searchBox.addEventListener(TextEvent.TEXT_INPUT, splitBox);
function splitBox(e:TextEvent):void{
    splitSearch = searchBox.text.split("");
}
searchBox.addEventListener(TextEvent.TEXT_INPUT, split);
function split(e:TextEvent):void{
    trace(splitSearch);
}
4

1 回答 1

3

您的问题是 TEXT_INPUT 事件在文本字段更新之前触发。有两种方法可以得到你想要的结果。我认为最简单的方法是收听 Event.CHANGE 事件的文本字段。如果你真的要使用TEXT_INPUT,你需要将文本字段的字符拆分,然后将用户刚刚输入的字符压入数组中。两种解决方案都可以正常工作。

package 
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.TextEvent;
    import flash.text.TextField;
    import flash.text.TextFieldType;

    public class Main extends Sprite 
    {
        private var searchBox:TextField;
        private var splitSearch:Array;

        public function Main():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }

        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);

            searchBox = new TextField();
            searchBox.border = true;
            searchBox.type = TextFieldType.INPUT;
            addChild(searchBox);
            searchBox.addEventListener(TextEvent.TEXT_INPUT, splitBox);
            searchBox.addEventListener(TextEvent.TEXT_INPUT, split);

            searchBox.addEventListener(Event.CHANGE, onTxtChange);
        }

        private function splitBox(e:TextEvent):void{
            trace("splitBox() " + e.text + "  " + searchBox.text);
            splitSearch = searchBox.text.split("");
            splitSearch.push(e.text);
        }
        private function split(e:TextEvent):void{
            trace("split() " + splitSearch);
        }
        private function onTxtChange(e:Event):void
        {
            trace("onTxtChange() " + searchBox.text);
        }
    }
}
于 2013-03-23T14:29:04.580 回答