Flex 3: отключить возврат и удалить в TextArea - PullRequest
3 голосов
/ 09 декабря 2010

Я пытаюсь предотвратить изменение текста любым текстом в Flex TextArea.Я не хочу устанавливать для свойства editable значение false, потому что я хочу, чтобы каретка была видимой для индикатора «текущей позиции», чтобы пользователь знал, с чего начнется поиск, который он инициирует.добавлены обработчики событий для change и textInput, а также keyUp и keyDown, которые делают 'event.preventDefault', а также 'event.stopImmediatePropagation'.Это прекрасно работает для большинства ключей, за исключением возврата и удаления.

Есть ли способ, чтобы они ничего не делали?

Ответы [ 4 ]

2 голосов
/ 09 декабря 2010

Это может помочь:

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    <mx:Script>
        <![CDATA[
            private function onKeyDown(event:KeyboardEvent):void {
                if ( event.keyCode == 8 || event.keyCode == 46 ) {
                    event.preventDefault();
                }
            }
    ]]>
    </mx:Script>
    <mx:TextArea keyDown="onKeyDown(event);" width="100%" height="100%" />
</mx:WindowedApplication>
1 голос
/ 09 декабря 2010

Хммм, кажется, что он действительно не работает в браузере, как насчет обходного пути, не уверен, что вам понравится, но, кажется, достигает того, что вам нужно, кроме вставки:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    <mx:Script>
        <![CDATA[
            import mx.controls.Alert;

            private var _lastSelStart:Number = 0;
            private var _lastSelEnd:Number = 0;
            private var _lastText:String = null;
            private var _prevent:Boolean = false;

        private function onKeyDown(event:KeyboardEvent):void {
            if ( event.keyCode == 8 || event.keyCode == 46 ) {
                if ( !_prevent ) {
                    _prevent = true;
                    _lastText = txt.text;
                    _lastSelStart = txt.selectionBeginIndex;
                    _lastSelEnd = txt.selectionEndIndex;
                }
            }
        }

        private function onKeyUp( event:KeyboardEvent ):void {
            if ( _prevent ) {
                _prevent = false;
                txt.text = _lastText;
                _lastText = null;
                callLater(txt.setSelection, [_lastSelStart, _lastSelEnd]);
            }
        }

        ]]>
    </mx:Script>
    <mx:TextArea keyDown="onKeyDown(event);" keyUp="onKeyUp(event);" width="100%" height="100%"
        id="txt" />
</mx:Application>
1 голос
/ 09 декабря 2010

Почему бы просто не вставить текст при изменении?

0 голосов
/ 28 августа 2013

Думаю, я нашел выход: во флэш-памяти предотвращение ошибок не работает для ключевого события, но оно хорошо работает для изменения события.Вы можете сделать что-то похожее на это https://stackoverflow.com/a/8078910/1927950, чтобы избежать каких-либо изменений, но при этом сохранить каретку.

...