加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

flex – 如果有焦点,如何让空格键上的按钮不激活?

发布时间:2020-12-15 01:44:31 所属栏目:百科 来源:网络整理
导读:我试图阻止的行为是在用户点击按钮后,按钮保持焦点,然后如果用户点击空格键,则按钮再次触发.所以我认为可以通过将焦点设置在别处,或者通过让按钮忽略空格键来解决.我已经尝试在按钮上添加以下keyDown事件侦听器,但它不起作用. private function btn_keyDown(
我试图阻止的行为是在用户点击按钮后,按钮保持焦点,然后如果用户点击空格键,则按钮再次触发.所以我认为可以通过将焦点设置在别处,或者通过让按钮忽略空格键来解决.我已经尝试在按钮上添加以下keyDown事件侦听器,但它不起作用.

private function btn_keyDown(event:KeyboardEvent):void {
  // try to ignore spaces,i.e. don't click on SPACE when it has focus
  if (event.keyCode == Keyboard.SPACE) {
  }
}

我尝试通过执行以下操作来更改焦点,在单击按钮时调用的函数结束时:

stage.focus = parent;

但那也不起作用.

解决方法

您将需要创建自定义按钮组件并覆盖keyDownHandler.但是,如果要选择要停止的按钮,则需要为代码添加条件.它应该是这样的:

package Sandbox
{
    import mx.controls.Button;
    import flash.events.KeyboardEvent;

    public class KeyButton extends Button
    {
        public function KeyButton()
        {
            super();
        }

        protected override function keyDownHandler(e : KeyboardEvent) : void {
            if (e.keyCode == 32) { // Spacebar
                return;
            }
            else if (e.keyCode == 67) { // Letter C
                this.parentApplication.setStyle ("backgroundColor","#00aa00");
            }

            super.keyDownHandler (e);
        }

    }
}

这样做的好处是其他键仍然可以正常工作,比如Enter,或者你可以为不同的键添加更多的条件,例如,如果你想按C或其他什么就想改变按钮的颜色.

虽然我们正在使用它,但KeyboardEvent.keyCode和charCode之间存在差异. keyCode是物理键盘上键的ID,这意味着小写c和大写C是相同的(keyCode == 67).另一方面,charCode是ASCII表中字符的地址,因此c和C是不同的(C是67而c是99).简而言之,keyCode不区分大小写.

哦,是的.如果你需要检查一个密钥的密钥和字符代码(包括像Backspace这样的仲裁代码),请查看这个page Adob??e的优秀人员.

我还制作了一个application来说明这一点.它是一个标准的Flex Builder项目,但如果您没有它,则源位于src文件夹中.启动应用程序,然后单击按钮将其聚焦.按钮的点击事件可以显示一些文本.虽然它有焦点,按空格键,它应该触发点击事件并打印更多文本,但没有任何反应!现在,按c键更改应用程序的背景颜色.干净,嗯?

你可以找到源here.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读