Come impostare a livello di programmazione focus su HorizontalList in modo che possa ricevere eventi chiave (Flex)?

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

  •  06-07-2019
  •  | 
  •  

Domanda

Per favore, guarda il codice:

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

Come vedi, provo a focalizzare il mio HorizontalList quando l'applicazione viene caricata. E in realtà ricevo il messaggio ricevuto focus nella console. Ma mi aspettavo di poter navigare sugli elementi dell'elenco con i tasti freccia dopo aver impostato lo stato attivo. Ma non è così. Funzionano solo dopo aver fatto clic sul componente con il mouse. Quindi, cosa sto facendo di sbagliato? Come rendere la lista focalizzata e rispondere ai tasti freccia?

È stato utile?

Soluzione

La tua app è in esecuzione all'interno di un browser? Potrebbe essere necessario mettere a fuoco l'oggetto SWF (tramite JavaScript) per iniziare a interagire con esso senza fare prima clic sull'oggetto.

Ad esempio, supponendo che tu stia utilizzando Flex Builder, prova ad aggiungere una riga come questa alla fine del tag SCRIPT del tuo file index.template.html:

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

Potrebbe essere necessario apportare alcune modifiche a seconda della situazione specifica, ma è probabilmente questo il problema. Impostare esplicitamente il focus sull'oggetto Flash dovrebbe fare il trucco. Spero che sia d'aiuto!

Altri suggerimenti

Ho eseguito il tuo codice e sono stato in grado di navigare nell'elenco con la tastiera senza fare prima clic sull'elenco , ma ho dovuto fare clic da qualche parte sull'app Flex in modo che riceve l'attenzione in primo luogo. Penso che sia una limitazione del flash in generale - il file SWF non riceverà lo stato attivo della tastiera se non fai clic da qualche parte su di esso (mouseOver verrà comunque attivato).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top