2015-12-22 43 views
1

更新:显然这是accessibility scheme of Flex Spark Components星火按钮俘获的keydown(空格键)事件

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

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


问:没有任何理由火花按钮会捕获关键事件,特别是“空格”键事件?

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

奇怪的是吧?

该按钮在MX:Module内的MXML(以下)中定义。该模块具有安装阶段关键事件侦听器,但对于那些在事件处理程序做什么用的按钮:

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

这对Flex来说很正常。您还应该能够通过使用<tab>密钥来浏览交互式元素。 <space>通常就像点击一样。您可以尝试通过任一

一)通过检查keyboardPressed财产按下按钮

B)后,将焦点设置到另一个对象,以避免这种情况。

两者都有点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

+0

哦,是的,'keyboardPressed'是保护,所以它只会在一个自定义组件内扩展s:按钮 - 我的错。 – FatalDiskError

+0

不是100%与您的问题相关,但也检查属性** tabEnabled **和** tabFocusEnabled **。所以你至少可以摆脱导航。我认为Adobe放弃了Flex的原因;-) – FatalDiskError