使用TextEvent.TEXT_INPUT时滞后

时间:2013-03-23 13:19:11

标签: actionscript-3 text textbox

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

e.g:

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

我该如何解决这个问题?我已经尝试添加另一个只有痕迹,但没有区别。感谢。

代码(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);
}

1 个答案:

答案 0 :(得分: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);
        }
    }
}