Como programaticamente definir foco para HorizontalList para que pudesse receber eventos-chave (Flex)?
-
06-07-2019 - |
Pergunta
Por favor, olhar para o código:
<?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>
Como você pode ver, eu tento fazer o meu HorizontalList
focada quando o aplicativo é carregado. E eu realmente receber mensagem Received focus
no console. Mas eu esperava que eu seria capaz de navegar sobre os elementos da lista com as setas depois de definir o foco. Mas isso não é o caso. Eles funcionam apenas após clicar componente com mouse. Então, o que estou fazendo de errado? Como fazer lista tem foco e responder aos setas?
Solução
O seu aplicativo em execução dentro de um navegador? Você pode ter de foco definido no objeto SWF (via JavaScript), a fim de começar a interagir com ele sem clicar o objeto em primeiro lugar.
Por exemplo, supondo que você está usando Flex Builder, tente adicionar uma linha como essa ao final da tag SCRIPT do seu arquivo index.template.html:
window.onload = function()
{
document.getElementById("${application}").focus();
};
Você pode precisar de fazer um pouco de ajustes, dependendo da sua situação específica, mas isso é provavelmente a questão. Definir o foco no objeto Flash explicitamente deve fazer o truque. Espero que ajude!
Outras dicas
Corri seu código e foi capaz de navegar pela lista com teclado sem clicando na lista ??strong> em primeiro lugar - mas eu tinha que clicar em algum lugar no aplicativo Flex para que ele recebe o foco em primeiro lugar. Eu acho que é uma limitação do Flash em geral -. O SWF não receberá o foco do teclado a menos que você clique em algum lugar sobre ele (mouseOver ainda será demitido embora)