2011-07-08 99 views
0

我在包含視圖堆棧及其子模塊的模塊內部執行此操作。 在creationComplete模塊上調用onInit()。鍵盤事件的事件監聽器不在模塊中偵聽

當我在這個模塊的viewstack中的一個孩子裏面並按下回車鍵時,它根本不會調用監聽器函數(這裏的bp沒有被命中)。

private function onInit():void{ 
this.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed); 
} 

private function keyPressed(evt:KeyboardEvent):void 
      {//this breakpoint never gets hit on pressing a key in screen 
       if (evt.keyCode == Keyboard.ENTER) 
       { 
       //do this 
        }    
      } 

回答

1

您應該添加按鍵偵聽到舞臺對象:

private function onInit():void{ 
    this.stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed); 
} 
1

這是非常令人沮喪,因爲有幾個不同的東西,會影響這一點。

1)將您的事件偵聽器添加到適當的位置。您擁有的代碼可以很好地捕獲,只需確保它位於事件被觸發的父級或以上級別。

2)你需要確保你有重點。這通常是人們遇到的問題,它在文檔中,但不是很明確。如果你在這裏查看實時文檔鏈接,並搜索setFocus() - 你會注意到它的每一個例子(除了頂部,這是壞的!) - 然而,他們從來沒有提到它在頁面上的實際文檔中。

http://livedocs.adobe.com/flex/3/html/help.html?content=events_11.html

所以,即使在他們的第一個例子,如果你點擊進入應用程序(而不是文本框),它不會工作!

<?xml version="1.0"?> 
<!-- events/TrapAllKeys.mxml --> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initApp();"> 
<mx:Script><![CDATA[ 
    private function initApp():void { 
     application.addEventListener(KeyboardEvent.KEY_UP, keyHandler); 
    } 

    private function keyHandler(event:KeyboardEvent):void { 
     t1.text = event.keyCode + "/" + event.charCode; 
    } 
]]></mx:Script> 

<mx:TextInput id="myTextInput"/> 

<mx:Text id="t1"/> 

</mx:Application> 

但是,如果您通過更改init函數來自己設定焦點,它會!

private function initApp():void { 
     application.addEventListener(KeyboardEvent.KEY_UP, keyHandler); 
     myTextInput.setFocus(); 
    } 

另一個技巧進行測試,如果這是你的問題是添加一個文本框爲具有捕捉容器的孩子,如果他們你在文本框中單擊後神奇的工作 - 它的一個焦點問題,確實!

=)

+0

感謝內特,我會嘗試,太多,但什麼Shanethehat提示很容易過的工作。 – Tintin