2010-02-19 151 views
9

我想在用戶填寫AS3中的輸入文本字段時按下Enter鍵。 我想我必須做這樣的事情:在AS3中輸入文本字段中輸入按鍵輸入

inputText.addEventListener(Event. ? , func); 
    function func(e:Event):void{ 
     if(e. ? == "Enter"){ 
      doSomething(); 
     } 
    } 

但我找不到要做到這一點的最好辦法。 順便說一句,在輸入文本有一個限制:

inputText.restrict = "0-9"; 

我應該加回車鍵的限制?

inputText.restrict = "0-9\n"; 

在此先感謝。

回答

34

更正答案

您可以輕鬆地聽,當文本字段集中發生的鍵盤事件。

只需將一個KEY_DOWN事件直接添加到文本字段,然後做任何你想要的。

// get key presses only when the textfield is being edited 
inputText.addEventListener(KeyboardEvent.KEY_DOWN,handler); 
function handler(event:KeyboardEvent){ 

    // if the key is ENTER 
    if(event.charCode == 13){ 

     // your code here 
     doSomething(); 
    } 
} 

在一個單獨的說明,文本框也發送其他有用的事件:

  • 當用戶修改(如果它的輸入文本字段) - Event.CHANGE
  • 當文本由輸入用戶(如果它的輸入文本框) - TextEvent.TEXT_INPUT
  • 當單擊鏈接(如果它的HTML文本) - TextEvent.LINK
  • 當用戶滾動時(如果它的多行和內容不' t fi T) - Event.SCROLL

上一個錯誤答案:

我認爲,真正做你想做什麼的唯一方式是有點複雜。

基本上,您不能從常規TextField中獲取任何事件,當按下Enter鍵時會觸發該事件。你必須做的工作...

一個想法是聽文本字段焦點事件。當它具有焦點時,您將一個監聽器添加到鍵盤事件的舞臺上,並檢查按下的按鍵是否爲Enter,如果是,則觸發您的操作,否則跳過。

示例代碼:

inputText.addEventListener(FocusEvent.FOCUS_IN,textInputHandler); 
inputText.addEventListener(FocusEvent.FOCUS_OUT,textInputHandlerOut); 

function textInputHandler(event:FocusEvent):void { 
    //our textfield has focus, we want to listen for keyboard events. 
    stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler); 
} 

function textInputHandlerOut(event:FocusEvent):void { 
    //our textfield lost focus, remove our listener. 
    stage.removeEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler); 
} 

function keyDownHandler(e:KeyboardEvent):void{ 
    //a key was pressed, check if it was Enter => charCode 13. 
    if(e.charCode == 13){ 
     //ok, enter was pressed. Do your thing. 
     trace("We pressed enter, doSomething") 
    } 
} 
+1

我使用過: inputText.addEventListener(KeyboardEvent.KEY_DOWN,handler); 函數處理函數(事件:KeyboardEvent){if(event.charCode == 13){ doSomething(); } } 它的工作原理。謝謝。 – 2010-02-19 16:33:19

+0

@Jonathan - 我編輯了答案來反映真相。 – 2011-01-07 16:52:51

+0

在發表這樣的廢話之前,請檢查一下您的事實,這個問題已經過了一年多了,超過4000人被誤認爲相信這些簡單的事情是困難的。 – 2011-01-07 16:53:35

0

您使用的是文本框還是TextInput?

當按下回車鍵時,TextInput調度Enter事件。更多關於這可以在http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/fl/controls/TextInput.html#event:enter

我不知道這是如何工作的文本框。

+0

我使用文本工具,然後我設置該框是一個輸入文本。 我試圖使用inputText.enter = function(e:Object){bla},但它拋出了 錯誤#1056:無法在flash.text.TextField中創建屬性輸入。 謝謝。 – 2010-02-19 16:12:17

2

對於那些想知道如何處理「Enter」鍵按下一個TextInput字段,而不是一個文本字段,這裏的簡單過程:

import fl.events.ComponentEvent 

... 

myListeningField.addEventListener(ComponentEvent.ENTER, listenerMethod); 


function listenerMethod(e:Event):void{ 
    //DO SOME STUFF 
}