Events Flex 3:在文本区域中禁用退格和删除
我试图阻止任何键改变Flex TextArea中的文本。我不想将editable属性设置为false,因为我希望插入符号对于“当前位置”指示器可见,以便用户知道他将从何处开始搜索 我已经为change和textInput添加了事件处理程序,以及执行“event.preventDefault”和“event.stopImmediatePropagation”的keyUp和keyDown。除了退格和删除外,这对大多数关键点都很有效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。除了退格和删除外,这对大多数关键点都很有效 有什么方法可以阻止它们做任何事情吗?为什么不在更改时重新插入文本?这
有什么方法可以阻止它们做任何事情吗?为什么不在更改时重新插入文本?这可能会有帮助:
<?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应用程序不起作用。非常感谢您的帮助-非常感谢。我想我还需要一些逻辑来处理按下的键,但这看起来不错。但是,不得不复制一个字符串真是太可惜了——它可能会爆炸!我修改了代码来处理按下的键。另外,如果这有帮助,您可以将其标记为答案吗?在您的事件侦听器中,您在使用捕获阶段吗?