更新:显然这是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"/>
答案 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