我正在为我的IT-Class中的作业制作一个简单的计算器。它有3个文本框,用户可以在其中添加他的数字,并且框内部以“0”开头,以显示用户应该在这里写数字。我想做的是,当用户把注意力集中在盒子上时,这个零消失了。
由于我有3个框,我想让EventListener调用一个删除文本和Eventlistener的函数,而不是编写相同的代码3次。
使用包含不同文本框的数组,我设法调用它们,并根据需要更改文本,但不删除EventListener,因此当用户关注文本框时,用户写入的文本将被删除再次
///////////////////////////////////////////////////////////////////////////////////
//The Array containing all the TextFields
var textFieldArr:Array = new Array(txtNumber1,txtNumber2,txtNumber2)
function onFocus(i:int){
return function (evt:FocusEvent){
textFieldArr[i].text = "";
textFieldArr[i].removeEventListener(FocusEvent.FOCUS_IN, onFocus(i))
}
}
//Calls up the onFocus function and declares variable i
txtNumber1.addEventListener(FocusEvent.FOCUS_IN, onFocus(0));
txtNumber2.addEventListener(FocusEvent.FOCUS_IN, onFocus(1));
txtNumber3.addEventListener(FocusEvent.FOCUS_IN, onFocus(2));
///////////////////////////////////////////////////////////////////////////////
答案 0 :(得分:0)
不会删除侦听器,因为onFocus
会在每个调用新Function
实例时返回。
您可以尝试使用target
类的FocusEvent
属性:
var textFieldArr:Array = new Array(txtNumber1,txtNumber2,txtNumber2)
function onFocus(evt:FocusEvent){
TextField(evt.target).text = "";
TextField(evt.target).removeEventListener(FocusEvent.FOCUS_IN, onFocus)
}
//Calls up the onFocus function and declares variable i
txtNumber1.addEventListener(FocusEvent.FOCUS_IN, onFocus);
txtNumber2.addEventListener(FocusEvent.FOCUS_IN, onFocus);
txtNumber3.addEventListener(FocusEvent.FOCUS_IN, onFocus);
答案 1 :(得分:0)
您的事件侦听器未被删除,因为当您在removeEventListener参数中调用onFocus(i)时,您将返回一个新函数,而不是最初由该事件触发的函数。您的代码的另一个问题是,您声明的侦听器函数中不存在“i” - 您只需要使用evt的属性来确定要定位的文本字段以及要删除的正确事件侦听器。 / p>
执行此操作的常见/正确方法是使用事件接受函数,并使用它来侦听每个文本字段。除非你有其他用途,否则你甚至不再需要这个数组。
function onFocusIn(evt:FocusEvent):void{
trace("onFocusIn("+evt.target+")");
var focusedField:TextField = TextField(evt.target);
if(focusedField){
focusedField.text = "";
focusedField.removeEventListener(FocusEvent.FOCUS_IN, onFocusIn);
}
}
txtNumber1.addEventListener(FocusEvent.FOCUS_IN, onFocusIn);
txtNumber2.addEventListener(FocusEvent.FOCUS_IN, onFocusIn);
txtNumber3.addEventListener(FocusEvent.FOCUS_IN, onFocusIn);