¿Cómo establecer programáticamente el foco en HorizontalList para que pueda recibir eventos clave (Flex)?

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

  •  06-07-2019
  •  | 
  •  

Pregunta

Por favor, mire el 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 puede ver, trato de enfocar mi HorizontalList cuando se carga la aplicación. Y en realidad recibo el mensaje Enfoque recibido en la consola. Pero esperaba poder navegar sobre los elementos de la lista con las teclas de flecha después de establecer el foco. Pero ese no es el caso. Funcionan solo después de hacer clic en el componente con el mouse. Entonces, ¿qué estoy haciendo mal? ¿Cómo hacer que la lista tenga foco y responda a las teclas de flecha?

¿Fue útil?

Solución

¿Su aplicación se ejecuta dentro de un navegador? Es posible que tenga que establecer el foco en el objeto SWF (a través de JavaScript) para comenzar a interactuar con él sin hacer clic primero en el objeto.

Por ejemplo, suponiendo que esté utilizando Flex Builder, intente agregar una línea como esta al final de la etiqueta SCRIPT de su archivo index.template.html:

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

Es posible que necesite hacer un pequeño ajuste dependiendo de su situación específica, pero ese es probablemente el problema. Establecer el foco en el objeto Flash explícitamente debería ser el truco. Espero que ayude!

Otros consejos

Ejecuté su código y pude navegar por la lista con el teclado sin hacer clic en la lista primero, pero tuve que hacer clic en algún lugar de la aplicación flexible para que recibe el foco en primer lugar. Creo que es una limitación del flash en general: el SWF no recibirá el foco del teclado a menos que haga clic en algún lugar (aunque mouseOver todavía se disparará).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top