我正在为关键字制作一个输入字段,而在用户写作时,我正在插入符号位置下方的列表中显示对关键字的建议。
输入字段是单行,因此我使用向上/向下箭头键选择建议并按 Enter 将其插入。
它主要工作,除了向上/向下键还将插入符号位置更改为 TextField
的开始/结束的一个很大的异常(exception)。
我已经尝试在 preventDefault()
事件监听器中使用 stopImmediatePropagation()
和 KeyboardEvent.KEY_DOWN
,我也用它们来更改选定的建议,但这不会改变任何内容。
当 KeyboardEvent.KEY_DOWN
事件被触发时,我检查了 carret 尚未移动,但在视觉上我可以看到它在释放键(键向上)之前正在移动。
我可以只保存插入符号位置,然后重置默认行为。但这将适本地涉及使用计时器的一些类似黑客的代码。
那么有谁知道如何防止默认行为?
最佳答案
你不能阻止它,但你可以逆转它。为此,您将具有不同优先级的处理程序添加到同一事件 - KeyboardEvent.DOWN。一个将在 TextField 的 之前执行,并保存选择索引,另一个在之后,恢复它们。工作代码如下:
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import mx.controls.TextInput;
import mx.events.FlexEvent;
public class FooledTextInput extends TextInput
{
private var ssi : int = 0;
private var sei : int = 0;
public function FooledTextInput()
{
super();
this.addEventListener(KeyboardEvent.KEY_DOWN, onBeforeKeyDown, false, 10000);
this.addEventListener(KeyboardEvent.KEY_DOWN, onAfterKeyDown, false, -10000);
}
private function onBeforeKeyDown(e : KeyboardEvent) : void
{
if (e.keyCode == Keyboard.UP || e.keyCode == Keyboard.DOWN)
{
ssi = this.selectionBeginIndex;
sei = this.selectionEndIndex;
}
}
private function onAfterKeyDown(e : KeyboardEvent) : void
{
if (e.keyCode == Keyboard.UP || e.keyCode == Keyboard.DOWN)
{
this.setSelection(ssi, sei);
}
}
}
您可能想要更好的 ssi(选择开始索引)和 sei(选择结束索引)名称,我懒得找一些。
我认为这个解决方案是基于 Alex Harui 的一篇文章,我记不清了,但他的博客上有很多与 Flex 相关的好东西。
更新: 对于 spark TextInput,防止不仅是可能的,而且非常容易。您需要做的就是在捕获阶段捕获事件并停止传播。代码:
package
{
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import spark.components.TextInput;
public class HackedTextInput extends TextInput
{
public function HackedTextInput()
{
super();
addEventListener(KeyboardEvent.KEY_DOWN, onBeforeKeyDown, true);
}
private function onBeforeKeyDown(e:KeyboardEvent) : void
{
if (e.keyCode == Keyboard.UP || e.keyCode == Keyboard.DOWN)
{
e.stopImmediatePropagation();
}
}
}
}
请注意 addEventListener 调用中的最后一个参数,该参数设置为 true 以便在捕获阶段调用处理程序。遗憾的是,此解决方案不适用于 mx TextInput,仅适用于 spark。
关于apache-flex - 如何防止 TextField 中的向上/向下箭头默认行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1018259/