【问题标题】:Spark Button trapping keydown (spaceBar) eventSpark Button 捕获 keydown (spaceBar) 事件
【发布时间】:2015-12-22 20:41:33
【问题描述】:

更新:显然这是accessibility scheme of Flex Spark Components的一部分

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

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


问题:Spark Button 是否有任何原因会捕获键事件,尤其是“空格键”键事件?

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

很奇怪,对吧?

该按钮在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"/>

【问题讨论】:

    标签: actionscript-3 apache-flex air flex4


    【解决方案1】:

    这对于 Flex 来说是很正常的。您还应该能够使用&lt;tab&gt; 键浏览交互元素。 &lt;space&gt; 通常就像点击一样。您可以尝试通过以下任一方式避免这种情况

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

    b) 通过检查 keyboardPressed 属性。

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

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

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

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

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

    【讨论】:

    • 哦,是的,keyboardPressed 是受保护的,所以它只能在扩展 s:Button 的自定义组件中工作——我的错。
    • 不是 100% 与您的问题相关,但还要检查属性 tabEnabledtabFocusEnabled。所以你至少可以摆脱 导航。我猜 Adob​​e 放弃 Flex 是有原因的 ;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    相关资源
    最近更新 更多