AS3 TextField - нежелательный возврат каретки при установке значения в "" - PullRequest
3 голосов
/ 08 января 2010

У меня есть входной TextField и у меня даже слушатель KeyboardEvent.KEY_DOWN на сцене, чтобы прослушать событие Keyboard.ENTER. Слушатель событий добавляет введенный текст в массив или что-либо еще, а затем очищает TextField. Проблема состоит в том, что, когда происходит событие клавиши Enter и значение TextField установлено на «», он оставляет возврат каретки в TextField и курсор помещается во вторую строку. WTF? Я долгое время кодировал 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 = "";
    }
}

Ответы [ 8 ]

1 голос
/ 09 июня 2011

Просто замените KEY_DOWN на KEY_UP.Это решает проблему (по крайней мере для меня)

1 голос
/ 30 июня 2011

Используйте 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 = "";
                             }
                         });
0 голосов
/ 18 октября 2013

Я знаю, что это очень старый вопрос, все еще думающий поделиться своим решением.Я отключил многострочную функцию текстового поля в файле fla.После этого я не получаю возврат каретки в текстовом поле.

0 голосов
/ 01 марта 2011

Это похоже на какую-то ошибку - я тоже это понимаю. Если вы просто установите textField.text = "" в своем конструкторе (или где-либо), это, похоже, решит проблему.

0 голосов
/ 29 апреля 2010
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);
}
}
0 голосов
/ 10 февраля 2010

Если вы находитесь в режиме разработки Flash (в IDE), вам необходимо снять отметку Control -> Disable Keyboard Shortcuts во время тестирования. Также попробуйте создать обработчик очистки для KEY_UP.

0 голосов
/ 09 января 2010

Вы нажимаете ввод с текстовым полем в фокусе? В этом случае может случиться так, что onKeyDown вызывается до того, как значение текстового поля обновляется действием клавиатуры. Вы устанавливаете для текстового поля пустую строку в onKeyDown, а затем Flash добавляет к нему новую строку.

Добавьте прослушиватель события ввода текста в текстовое поле и добавьте операторы трассировки в оба обработчика событий, чтобы узнать порядок событий.

0 голосов
/ 09 января 2010

Если вы можете ввести возврат каретки, это означает, что TextField является многострочным, не так ли?

Вы пытались очистить введенный текст в функции обратного вызова прослушивателя событий KeyboardEvent.KEY_UP?

...