如何保持按键传播

时间:2011-12-14 21:12:36

标签: actionscript-3 flex

我有一个viewstack,它实现了一个用于执行新订单的“向导”界面。在向导的最后一页上,有一个按钮,上面有一个假加速器,如果按下'o',它们就可以重新开始这个过程。

以下是我的经纪人:

        protected function _keyDownHandler(e:KeyboardEvent):void
        {
            if((e.charCode == 111)) {
                // stop the 'o' from getting out 
                trace("Cancelable : " , e.cancelable);
                this.removeEventListener(KeyboardEvent.KEY_DOWN, _keyDownHandler, true);
                e.stopImmediatePropagation();
                e.preventDefault();
                model.orderNew();
            }

        }

问题在于,当用户返回向导的第1页时,刚输入的用户'o'现在被输入到数据网格过滤文本框中(按姓氏“o”开头的过滤名称),这不是什么是期望的。

正如您所看到的,我已经尝试禁止此交互,但它似乎还不够,即使model.orderNew()位包含交换视图堆栈页面的所有代码,重新设置重点关注txtSearchFilter等......我很沮丧!

看来e.cancelable == false,这可能就是我得到这种行为的原因..但文档说KEY_DOWN IS 可以取消,所以......我还是迷路了

如何保持按键传播到表单?

由于

3 个答案:

答案 0 :(得分:1)

您可以尝试将侦听器更改为使用“捕获”模式而不是冒泡。

addEventListener(KeyboardEvent.KEY_DOWN, _keyDownHandler, true);

有关详细信息,请参阅addEventListener()上的AS3参考。

<小时/> 编辑:实际上,这可能不是直接问题。相反,您可能需要取消KEY_UP事件,并在视图的共同祖先上执行此操作。您仍然需要使用捕获模式。

答案 1 :(得分:1)

查看此主题:

http://forums.adobe.com/thread/434862

似乎在Flash播放器中都无法取消KEY_DOWN和KEY_UP事件。

答案 2 :(得分:0)

if((e.charCode == 111)){ removeEventListener(KeyboardEvent.KEY_DOWN ... }

然后在您需要的时候再次需要它(例如当您将焦点放在其他字段上时)重新启用它

相关问题