2012-03-21 89 views
0

我有一個flashclip內的TextInput,通過as3添加到舞臺上。 此mc加入舞臺的時刻,它將鍵盤事件(按下鍵和按鍵事件)分配到主舞臺(主應用程序舞臺),並將主舞臺焦點設置到主舞臺。沒有捕捉關鍵事件

到目前爲止這麼好。

問題是,當我輸入ENTER時,我發現KEY_DOWN,但是當我釋放按鍵ENTER時,我的KEY_UP事件沒有被我的函數分配給該事件。

任何機構都知道爲什麼?

它只適用於我點擊Flash播放器。


private function initAdded(e:Event){ 
    _main.stage.addEventListener(KeyboardEvent.KEY_DOWN,checkKeysDown); 
    _main.stage.addEventListener(KeyboardEvent.KEY_UP,checkKeysUp); 
    MovieClip(_main).setStageFocus() 
} 

private function checkKeysDown(e:KeyboardEvent):void { 
    if (e.keyCode == 13) { 
     trace('enter down') 
    } 
} 

private function checkKeysUp(e:KeyboardEvent):void { 
    if(e.keyCode == 13){ 
     trace('enter up') 
    } 
} 
+1

顯示一些代碼,請 – 2012-03-21 13:04:45

+0

我們需要至少可以看到:的addEventListener代碼,監聽功能 – 2012-03-21 13:11:01

+0

私有函數initAdded(五:事件){ \t \t \t \t \t \t _main.stage.addEventListener(KeyboardEvent.KEY_DOWN,checkKeysDown) ; \t \t \t _main.stage.addEventListener(KeyboardEvent.KEY_UP,checkKeysUp); \t \t \t的MovieClip(_main).setStageFocus() \t \t \t \t } \t私有 功能checkKeysDown(E:的KeyboardEvent):無效 \t \t { \t \t \t如果(e.keyCode == 13) \t \t \t {trace('enter down') } } private function checkKeysUp(e:KeyboardEvent):void \t \t { \t \t \t如果(e.keyCode == 13){ 跟蹤( '進入了') }} 關鍵 – 2012-03-21 13:12:47

回答

0

(代碼中的註釋提供)我要去猜測,KEY_UP事件是由你輸入在文本區域進行處理,並且不希望共享,所以它殺死了事件。嘗試:

_main.stage.addEventListener(KeyboardEvent.KEY_UP,checkKeysUp, true); 

這將導致事件偵聽器捕捉在捕捉階段的情況下,其他事件偵聽器取消該事件的傳播之前。

+0

KEY_UP正在處理的主要階段 – 2012-03-21 14:59:07

+0

當影片加載時,即使我不打字任何東西,但ENTER,KEY_UP事件函數不叫 – 2012-03-21 15:00:37

+0

我在內部討論,而不是你的代碼。文本區域內部正在監聽這些事件,否則文本將不在那裏。我在說它可能會在內部對待ENTER按壓方式不同,然後在完成時使用event.stopPropagation(),從而阻止您在冒泡階段監聽它。 – 2012-03-21 15:00:46