Flex 3:在TextArea中禁用退格和删除

时间:2010-12-09 11:32:06

标签: events flex textarea backspace

我正在尝试阻止任何密钥更改Flex TextArea中的文本。我不想将editable属性设置为false,因为我希望插入符号对于“当前位置”指示符是可见的,以便用户知道他发起的搜索将从哪里开始。

我添加了用于更改和textInput的事件处理程序,以及执行'event.preventDefault'的keyUp和keyDown以及'event.stopImmediatePropagation'。这适用于大多数密钥,但退格和删除除外。

有没有办法阻止他们做任何事情?

4 个答案:

答案 0 :(得分: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>

答案 1 :(得分:1)

为什么不将文本重新插入更改?

答案 2 :(得分: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>

答案 3 :(得分:0)

我想我已经找到了办法: 在flash中,preventDefault不适用于键事件,但它们可以正常工作 改变事件。您可以执行类似于此https://stackoverflow.com/a/8078910/1927950的操作,以避免任何修改但仍保留插入符号。

相关问题