2010-02-19 318 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 
}