我在文本框中使用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);
}
答案 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);
}
}
}