Spark Button 捕获 keydown (spaceBar) 事件

Spark Button trapping keydown (spaceBar) event

更新: 显然这是 accessibility scheme of Flex Spark Components

的一部分

Button control Press the Spacebar to activate the Button control. To cancel activating a button, press the Tab key to move the focus off the Button control before releasing the Spacebar.

我想可以通过编译器指令将其关闭:Accessibility best practices


问题:Spark Button 是否有任何原因会捕获按键事件,特别是 "spacebar" 按键事件?

背景: 我继承并维护着一个在 Flex 4.6 中完成的大型遗留项目。我看到 Spark Button 的奇怪行为。本质上,一旦按钮被点击(即获得焦点),keyEvent (spaceBar) 将触发附加到按钮的点击事件处理程序。

很奇怪吧?

按钮在 MX:Module 中的 MXML(下)中定义。该模块具有附加到舞台的关键事件侦听器,但这些事件处理程序对按钮没有任何作用:

this.stage.addEventListener(KeyboardEvent.KEY_DOWN, echoKeyDownHandler);
this.stage.addEventListener(KeyboardEvent.KEY_UP, echoKeyUpHandler);

如果我在按钮的事件处理程序中放置一个跟踪语句来检查发生这种奇怪行为时的事件类型,该类型将报告为 click。我在 Spark Button 的文档中没有看到任何有关捕获此类关键事件的内容。

   <s:Button id="toggleBtn"
     label="Editor" 
     click="toggleBtn_clickHandler(event)" 
      x="943" y="8"/>

这对于 Flex 来说很正常。您还应该能够使用 <tab> 键在交互元素中导航。 <space> 通常就像点击一样。您可以尝试通过

来避免这种情况

a) 按下按钮后将焦点设置到另一个对象

b) 通过检查 keyboardPressed 属性.

恕我直言,两者都有点老套。我不确定是否可以在 Flex 中完全关闭键盘导航。

[编辑 1] 我只是在想,如果像这样简单地覆盖默认键盘处理程序是否无济于事:

override protected function keyDownHandler(evt:KeyboardEvent):void {}

这是UIComponent继承的。并且您需要创建一个扩展 s:Button 的自己的组件。有点小缺点...

[edit 2] 我无法停止思考这个问题,即使我在 2-3 年前就停止使用 Flex。所以我用谷歌搜索了一下,发现这个堆栈溢出 post: How to disable default browser navigation with Space in Flex