2009-10-26 58 views
1

請,看代碼:如何以編程方式將焦點設置爲Horizo​​ntalList,以便它可以接收關鍵事件(Flex)?

<?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

您的應用程序在瀏覽器中運行嗎?您可能必須將焦點放在SWF對象上(通過JavaScript),以便無需先單擊對象即可開始與其交互。

例如,假設你使用Flex Builder,嘗試添加這樣一行一到你的index.template.html文件的SCRIPT標籤的末尾:

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

你可能需要做根據您的具體情況稍微調整一下,但這可能是問題。明確地將焦點放在Flash對象上應該能夠做到。希望能幫助到你!

+0

這是一個很好的小修補程序。謝謝。 – 2009-11-03 16:22:21

2

我跑你的代碼,並能夠通過與鍵盤列表而不單擊列表在第一次瀏覽 - 但我必須從某處點擊Flex應用程序,可以接收在首位的焦點。我認爲這是閃存的一般限制 - 除非您點擊它的某個位置,否則SWF將不會收到鍵盤焦點(mouseOver仍然會被觸發)。

相關問題