我试图阻止任何键更改 Flex TextArea 中的文本。我不想将可编辑属性设置为 false,因为我希望插入符号对于“当前位置”指示器可见,以便用户知道他启动的搜索将从哪里开始。
我添加了用于更改和 textInput 的事件处理程序,以及执行“event.preventDefault”和“event.stopImmediatePropagation”的 keyUp 和 keyDown。这对大多数键都适用,但退格键和删除键除外。
有没有办法阻止这些做任何事情?
我试图阻止任何键更改 Flex TextArea 中的文本。我不想将可编辑属性设置为 false,因为我希望插入符号对于“当前位置”指示器可见,以便用户知道他启动的搜索将从哪里开始。
我添加了用于更改和 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>
为什么不直接重新插入有关更改的文本?
嗯,似乎它在浏览器中真的不起作用,解决方法怎么样,不确定你是否会喜欢它,但似乎除了粘贴之外还可以实现你需要的东西:
<?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 不适用于关键事件,但它们适用于更改事件。您可以执行类似于此https://stackoverflow.com/a/8078910/1927950的操作,以避免任何修改但仍保留插入符号。