Events Flex 3:在文本区域中禁用退格和删除

Events Flex 3:在文本区域中禁用退格和删除,events,apache-flex,textarea,backspace,Events,Apache Flex,Textarea,Backspace,我试图阻止任何键改变Flex TextArea中的文本。我不想将editable属性设置为false,因为我希望插入符号对于“当前位置”指示器可见,以便用户知道他将从何处开始搜索 我已经为change和textInput添加了事件处理程序,以及执行“event.preventDefault”和“event.stopImmediatePropagation”的keyUp和keyDown。除了退格和删除外,这对大多数关键点都很有效 有什么方法可以阻止它们做任何事情吗?为什么不在更改时重新插入文本?这

我试图阻止任何键改变Flex TextArea中的文本。我不想将editable属性设置为false,因为我希望插入符号对于“当前位置”指示器可见,以便用户知道他将从何处开始搜索

我已经为change和textInput添加了事件处理程序,以及执行“event.preventDefault”和“event.stopImmediatePropagation”的keyUp和keyDown。除了退格和删除外,这对大多数关键点都很有效


有什么方法可以阻止它们做任何事情吗?

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

这可能会有帮助:

<?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>

Hmmm,似乎它在浏览器中真的不起作用,如何解决问题,不确定您是否喜欢它,但除了粘贴之外,似乎还实现了您需要的功能:

<?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>

我想我找到了一个方法: 在flash中,preventDefault不适用于关键事件,但适用于
改变事件。您可以执行类似的操作以避免任何修改,但仍保留插入符号。

Hmm-这是一个有趣的想法,但在触发更改事件时,文本字段已经更改,这意味着我必须保留文本的第二个副本。我将处理一些相当大的字符串,所以我不希望这样做。此外,在这个阶段,选择开始和结束索引都是相等的,所以如果用户选择了一块文本,似乎没有办法计算出他实际更改了什么?或者你能从某个地方的事件中得到吗?@Mike如果你把textfield绑定到一个保存文本的变量上,你就不必保留文本的第二个副本。然后要更改文本,请更改变量。在textfield的键侦听器中,重置为您的var值。我还没有测试过这个,但它在我的脑海中听起来是正确的。不幸的是,它没有!我尝试过类似的方法,虽然调用了事件处理程序,但文本仍然会被删除,我不知道为什么……好的,我已经作为桌面应用程序进行了测试,但作为Web应用程序不起作用。非常感谢您的帮助-非常感谢。我想我还需要一些逻辑来处理按下的键,但这看起来不错。但是,不得不复制一个字符串真是太可惜了——它可能会爆炸!我修改了代码来处理按下的键。另外,如果这有帮助,您可以将其标记为答案吗?在您的事件侦听器中,您在使用捕获阶段吗?