web-dev-qa-db-ja.com

AS3の入力テキストフィールドでEnterキーを押します

ユーザーがAS3の入力テキストフィールドに入力しているときにEnterキーが押されたのをキャッチしたいと思います。私はこのようなことをしなければならないと思います:

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

しかし、私はこれを行うための最良の方法を見つけることができません。ちなみに、入力テキストには制限があります。

inputText.restrict = "0-9";

制限にEnterキーを追加する必要がありますか?

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

前もって感謝します。

9

正解

テキストフィールドがフォーカスされているときに発生するキーボードイベントを簡単にリッスンできます。

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
  • ユーザーがスクロールしたとき(複数行と内容が収まらない場合)-Event.SCROLL

前の間違った答え:

実際にやりたいことをやる唯一の方法は少し複雑だと思います。

基本的に、Enterキーが押されたときに発生する通常のTextFieldからイベントを取得することはできません。あなたは回避策をしなければなりません...

1つのアイデアは、フォーカスイベントのテキストフィールドをリッスンすることです。フォーカスがある場合は、キーボードイベントのステージにリスナーを追加し、押されたキーが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" )
    }
}
33
goliatone

TextFieldではなくTextInputフィールドを使用して「Enter」キーを押す方法を知りたい方のために、簡単なプロセスを次に示します。

import fl.events.ComponentEvent

...

myListeningField.addEventListener(ComponentEvent.ENTER, listenerMethod);


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

テキストフィールドまたはTextInputを使用していますか?

Enterが押されると、TextInputはEnterイベントをディスパッチします。詳細については、 http://livedocs.Adobe.com/flash/9.0/ActionScriptLangRefV3/fl/controls/TextInput.html#event:enter を参照してください。

これがテキストフィールドでどのように機能するかわかりません。

0
Pbirkoff