1

请看代码:

<?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在控制台中收到消息。但我希望在设置焦点后能够使用箭头键浏览列表元素。但事实并非如此。它们仅在用鼠标单击组件后才起作用。那么,我做错了什么?如何使列表具有焦点并响应箭头键?

4

2 回答 2

4

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

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

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

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

于 2009-10-26T20:58:17.643 回答
2

我运行了您的代码,并且能够使用键盘在列表中导航而无需先单击列表- 但我必须单击 flex 应用程序上的某个位置,以便它首先获得焦点。我认为这通常是 Flash 的一个限制 - SWF 不会接收键盘焦点,除非您单击它的某个位置(但仍会触发 mouseOver)。

于 2009-10-26T14:59:55.137 回答