如何以编程方式将焦点设置到 Horizo​​ntalList 以便它可以接收按键事件(Flex)?

StackOverflow https://stackoverflow.com/questions/1625262

  •  06-07-2019
  •  | 
  •  

请看一下代码:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:creationComplete>
    <![CDATA[
        list.setFocus();
    ]]>
</mx:creationComplete>
<mx:HorizontalList id="list">
    <mx:creationComplete>
        <![CDATA[
            setFocus();
        ]]>
    </mx:creationComplete>
    <mx:focusIn>
        <![CDATA[
            trace("Received focus");
        ]]>
    </mx:focusIn>
    <mx:keyDown>
        <![CDATA[
            trace("Key down");
        ]]>
    </mx:keyDown>
    <mx:dataProvider>
        <mx:Object label="Some"/>
        <mx:Object label="Different"/>
        <mx:Object label="Stuff"/>
    </mx:dataProvider>
</mx:HorizontalList>

正如你所看到的,我努力让我的 HorizontalList 加载应用程序时聚焦。我实际上收到了 Received focus 控制台中的消息。但我希望在设置焦点后能够使用箭头键在列表元素上导航。但事实并非如此。它们仅在用鼠标单击组件后才起作用。那么,我做错了什么?如何使列表具有焦点并响应箭头键?

有帮助吗?

解决方案

您的应用程序在浏览器中运行吗?您可能必须将焦点设置在 SWF 对象上(通过 JavaScript)才能开始与其交互,而无需先单击该对象。

例如,假设您使用的是 Flex Builder,请尝试在 index.template.html 文件的 SCRIPT 标记末尾添加如下一行:

window.onload = function()
{
    document.getElementById("${application}").focus();
};

您可能需要根据您的具体情况进行一些调整,但这可能就是问题所在。明确地将焦点设置在 Flash 对象上应该可以解决问题。希望能帮助到你!

其他提示

我运行了您的代码并能够使用键盘浏览列表 无需点击列表 首先——但是我 必须点击 Flex 应用程序上的某个位置 以便它首先受到关注。我认为这是 flash 的一般限制 - SWF 不会接收键盘焦点,除非您单击其上的某个位置(尽管 mouseOver 仍会被触发)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top