2014-02-25 44 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);