我有一个输入文本字段,我想检查它是否以编程方式或用户输入更改。我的代码:
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();
}
...
这两种输出都是真的。我该如何解决这个问题?
答案 0 :(得分:0)
你只需要完成代码编写......
groupingFormula_txt.addEventListener(Event.CHANGE, onGrFormulaChange);
function onGrFormulaChange(event:Event):void {
trace("user input : " + event.target.text);
}
答案 1 :(得分:0)
至少有两种方法可以做到这一点。一,你创建一个基于TextField
的类,其中text
和htmlText
属性被观察者函数覆盖,如下所示:
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造成太大压力,尤其是如果目标中的文本文本字段很大。可能还有更多,但我还没想到。