0

テキストボックスでTextEvent.TEXT_INPUTイベントリスナーを使用して、ボックス内のエントリを文字の配列に分割していますが、イベントリスナーを使用してその配列をトレースしようとすると、最後から2番目の文字のみが表示されます。テキストボックス。

例えば:

「こんにちは」と入力すると、出力で「地獄」が表示されます。次に、それを「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イベントが発生することです。希望する結果を得るには2つの方法があります。最も簡単な方法は、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 に答える