Spark Button捕获keydown(spaceBar)事件

时间:2015-12-22 20:41:33

标签: actionscript-3 flex air flex4

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

的一部分
  

按钮控制按空格键激活按钮控件。要取消激活按钮,请按Tab键将焦点移开   释放空格键之前的Button控件。

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

问题:是否有任何理由让Spark Button捕获关键事件,特别是"空格键"关键事件?

后台:我已经继承并且正在维护在Flex 4.6中完成的大型遗留项目。我看到一个Spark Button的奇怪行为。基本上,一旦按下按钮(即给定焦点),keyEvent(spaceBar)将触发附加到按钮的click事件处理程序。

很奇怪,对吧?

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

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

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

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

1 个答案:

答案 0 :(得分:0)

这与Flex非常正常。您还应该能够使用<tab>键浏览交互式元素。 <space>通常就像点击一样。您可以尝试通过

来避免这种情况

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

b)选中 keyboardPressed 属性。

两者都有点hacky imho。我不确定是否可以在Flex中完全关闭键盘导航。

[编辑1]我只是想,如果简单地覆盖这样的默认键盘处理程序是没有用的:

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

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

[编辑2]我无法停止思考,即使我在2 - 3年前停止使用Flex。所以我google了一下,发现这个堆栈溢出帖子: How to disable default browser navigation with Space in Flex