3

入力 TextField があり、ステージ上に KeyboardEvent.KEY_DOWN イベントリスナーがあり、Keyboard.ENTER イベントをリッスンします。イベントリスナーは、入力されたテキストを配列などに追加してから、TextField をクリアします。問題は、Enter キー イベントが発生し、TextField 値が "" に設定されている場合、TextField にキャリッジ リターンが残り、カーソルが 2 行目に配置されることです。なんてこと?私は長い間 AS2 と AS3 をコーディングしてきましたが、これまで一度も遭遇したことがありません。私は私の心を失っていますか?助けてください、人々!:-)

例:

var myTextArray:Array = new Array();
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);

function onKeyDown(e:KeyboardEvent):void{
    if(e.keyCode == Keyboard.ENTER){
        if(_inputText.text != null){
            myTextArray.push(_inputText.text);
    }
    _inputText.text = "";
    }
}
4

8 に答える 8

1

KEY_DOWN を KEY_UP に置き換えるだけです。問題を修正します(少なくとも私にとっては)

于 2011-06-09T10:00:57.243 に答える
1

KEY_DOWN を使用 -> コード -> KEY_UP -> 空のフィールド

例(厄介なコード):

Message.addEventListener(KeyboardEvent.KEY_DOWN, function(e:KeyboardEvent):void
                     {
                        if(e.keyCode == Keyboard.ENTER)
                        {
                            // Your code...
                        }
                     });
Message.addEventListener(KeyboardEvent.KEY_UP, function(e:KeyboardEvent):void
                         {
                             if(e.keyCode == Keyboard.ENTER)
                             {
                                 Message.text = "";
                             }
                         });
于 2011-06-29T21:51:23.693 に答える
0

キャリッジリターンを入力できる場合は、TextFieldが複数行であることを意味しますね。

KeyboardEvent.KEY_UPイベントリスナーコールバック関数で入力テキストを空にしようとしましたか?

于 2010-01-09T01:12:23.023 に答える
0

テキストフィールドにフォーカスを合わせてEnterキーを押していますか?onKeyDownその場合、キーボードアクションによってテキストフィールドの値が更新される前に呼び出される可能性があります。のテキストフィールドを空の文字列に設定するonKeyDownと、flashが新しい行を追加します。

テキスト入力イベントリスナーをテキストフィールドに追加し、トレースステートメントを両方のイベントハンドラーに追加して、イベントの順序を確認します。

于 2010-01-09T06:58:49.197 に答える
0

(IDE で) Flash オーサリング モードを使用している場合は、[コントロール] -> [テスト中にキーボード ショートカットを無効にする] のチェックを外す必要があります。の「クリーンアップ」ハンドラも作成してみてくださいKEY_UP

于 2010-02-10T05:24:05.663 に答える
0
inputfield.addEventListener(Event.CHANGE, onChange);

private function onChange(e:Event):void {
if ( inputfield.text.charCodeAt(inputfield.text.length - 1) == 13 ) {
inputfield.text = inputfield.text.substr(0, inputfield.text.length - 1);
}
}
于 2010-04-29T14:59:20.937 に答える
0

私はそれが非常に古い質問であることを知っていますが、私の解決策を共有することをまだ考えていました. fla ファイルのテキスト ボックスの複数行機能を無効にしました。その後、テキストボックスにキャリッジリターンがありません。

于 2013-10-18T05:56:06.043 に答える
-1

これはある種のバグのようです - 私もそれを理解しています。コンストラクター (またはどこでも) で textField.text = "" を設定するだけで、問題が解決するようです。

于 2011-03-01T17:09:11.327 に答える