如何检查textfield是否以编程方式更改?

时间:2014-07-30 13:47:15

标签: actionscript-3 flash

我有一个输入文本字段,我想检查它是否以编程方式或用户输入更改。我的代码:

groupingFormula_txt.addEventListener(Event.CHANGE, onGrFormulaChange);

function onGrFormulaChange(event:Event):void {
...

编辑:抱歉不清楚。我想澄清一下这个问题。我试过下面的代码:

...
else if (event.target.text.charAt(groupingFr.length-1) == "/") {
    trace (event.target.text.charAt(groupingFr.length-1) == "/");
}

else if(lastChar == "/") {
    subunits = 1;
    left_mc.numeric_st.value = 1;
    groupingFormula_txt.text.replace(groupingFormula_txt.text.charAt(groupingFormula.length - 1), "");

    setNumericSt();

}
...

这两种输出都是真的。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

你只需要完成代码编写......

groupingFormula_txt.addEventListener(Event.CHANGE, onGrFormulaChange);

function onGrFormulaChange(event:Event):void {
    trace("user input : " + event.target.text);
}

答案 1 :(得分:0)

至少有两种方法可以做到这一点。一,你创建一个基于TextField的类,其中texthtmlText属性被观察者函数覆盖,如下所示:

class WatchedTextField extends TextField {
    public function set text(value:String):void {
        trace(this.name,'text changed to:',value);
        super.text=value;
    }
    public function set htmlText(value:String):void {
        trace(this.name,'htmlText changed to:',value);
        super.htmlText=value;
    }

另一个是在定时器例程或text事件监听器中反复查询给定TextField的Event.ENTER_FRAME属性:

static var allTexts:Dictionary=new Dictionary(); // stores previous texts
targetTF.addEventListener(Event.ENTER_FRAME,checkText);
function checkText(e:Event):void {
    var tf:TextField = e.target as TextField;
    if (tf==null) return; // not a textfield - go away
    var oldText:String=allTexts[tf]; // you can do this with dictionaries
    var newText:String=tf.text;
    if (oldText==null) allTexts[tf]=newText; else {
        // store the text if there was none. Or else compare them
        if (oldText!=newText) {
            // changed! alarm! panic! Anyway, do actions
            allTexts[tf]=newText;
        }
    }
}

第一种方法可能无法捕捉通过appendText()调用执行的更改,因为这些也“以编程方式”更改了文本字段的文本,第二种方式会对SWF造成太大压力,尤其是如果目标中的文本文本字段很大。可能还有更多,但我还没想到。