flex – 如何防止TextField中的箭头向上/向下默认行为?
我正在为关键字创建输入字段,而用户正在编写我在插入符号位置下方的列表上显示关键字的建议.
输入字段是单行,所以我使用向上/向下箭头键选择建议,然后按Enter键插入. 它主要是工作,但有一个很大的例外,即向上/向下键也会将插入位置更改为TextField的开头/结尾. 我已经尝试在KeyboardEvent.KEY_DOWN事件监听器中使用preventDefault()和stopImmediatePropagation(),我也用它来更改所选的建议,但这不会改变任何东西. 我可以保存插入位置,然后重置默认行为.但这恰恰涉及一些使用计时器的类似黑客的代码. 那么有谁知道如何防止默认行为? 解决方法
你不能阻止它,但你可以扭转它.为此,您可以向同一事件添加具有不同优先级的处理程序 – 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,-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(选择结束索引)的名字,我懒得找一些. 更新:对于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,true); } private function onBeforeKeyDown(e:KeyboardEvent) : void { if (e.keyCode == Keyboard.UP || e.keyCode == Keyboard.DOWN) { e.stopImmediatePropagation(); } } } } 请注意addEventListener调用中的最后一个参数,该参数设置为true,以便在捕获阶段调用处理程序.遗憾的是,此解决方案不适用于mx TextInput,仅适用于spark one. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |