3

キーが Flex TextArea のテキストを変更しないようにしようとしています。editable プロパティを false に設定したくありません。これは、キャレットを「現在の位置」インジケーターに表示して、ユーザーが検索を開始する場所をユーザーが認識できるようにするためです。

「event.preventDefault」と「event.stopImmediatePropagation」を実行する、change と textInput、keyUp と keyDown のイベント ハンドラーを追加しました。これは、バックスペースと削除を除いて、ほとんどのキーでうまく機能します。

これらが何かをするのを防ぐ方法はありますか?

4

4 に答える 4

2

これは役立つかもしれません:

<?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>
于 2010-12-09T12:06:32.927 に答える
1

変更時にテキストを再挿入しないのはなぜですか?

于 2010-12-09T11:34:10.017 に答える
1

うーん、ブラウザでは実際には機能しないようです。回避策はどうですか。気に入るかどうかはわかりませんが、貼り付け以外に必要なものを達成しているようです:

<?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>
于 2010-12-09T14:01:16.977 に答える
0

私は方法を考え出したと思います: フラッシュでは preventDefault はキーイベントでは機能しませんが、イベントの変更にはうまく機能します。このhttps://stackoverflow.com/a/8078910/1927950と同様のことを行って、変更を回避しながらキャレットを保持することができます。

于 2013-08-28T10:59:52.307 に答える