2014-02-25 45 views
0

决定,我想提出一个简单的计算器在我的IT级的任务。它有3个文本框,用户可以添加自己的号码,箱子与他们的“0”里面开始,就表明用户应该在这里写号。我想做的事,是有这样的零走为用户把重点放在盒子。去除对象的事件侦听通过阵列

因为我有3个箱子,我想使事件监听调用一个函数,删除文字和事件监听,而不是编写相同的代码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

事件侦听器没有被删除,因为当你在removeEventListener PARAM内调用的onfocus(I),正在返回你一个新功能而不是最初由事件触发的功能。你的代码的另一个问题是'i'不存在于你声明的侦听器函数中 - 你只需要使用evt的属性来确定要定位哪个文本字段,并且要删除正确的事件侦听器。

执行此操作的常用方法是使用事件接受函数,并使用它来侦听每个文本字段。你甚至都不需要再阵列,除非你有一些其他的使用它。

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); 
+0

谢谢你一堆!你的解释清除了我的一切! – user3351024

+0

问:在你的“removeEventListener”线为什么是侦听器函数“onFocusEvent”而不是“onFocusIn”? – Craig

+0

感谢您注意到这一点;这是一个错字。我修好了它。 – mfa

0

监听不会被删除,因为每次调用新Function实例onFocus回报。

您可以尝试使用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);