请看代码:
<?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
消息。但我希望在设置焦点后我可以使用箭头键在列表元素上导航。但事实并非如此。它们仅在使用鼠标单击组件后才起作用。那么,我做错了什么?如何使列表具有焦点并响应箭头键?
答案 0 :(得分:4)
您的应用是否在浏览器中运行?您可能必须将注意力设置在SWF对象上(通过JavaScript),以便开始与之交互而无需先单击对象。
例如,假设您正在使用Flex Builder,请尝试在index.template.html文件的SCRIPT标记的末尾添加如此行:
window.onload = function()
{
document.getElementById("${application}").focus();
};
您可能需要根据具体情况做一些调整,但这可能是问题所在。明确地将注意力集中在Flash对象上应该可以解决问题。希望它有所帮助!
答案 1 :(得分:2)
我运行了您的代码,并且能够使用键盘在列表中导航而不先点击列表 - 但我必须点击Flex应用中的某个地方以便它首先得到了关注。我认为这是闪存的一般限制 - 除非你点击它上面的某个地方,否则SWF将不会获得键盘焦点(尽管mouseOver仍会被触发)。