Comment définir par programme le focus sur HorizontalList afin qu'il puisse recevoir des événements clés (Flex)?

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

  •  06-07-2019
  •  | 
  •  

Question

Regardez le code:

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

Comme vous le voyez, j'essaie de rendre mon HorizontalList concentré lorsque l'application est chargée. Et je reçois en fait le message Reçu le focus dans la console. Mais je m'attendais à pouvoir naviguer dans la liste des éléments avec les touches de direction après avoir défini le focus. Mais ce n'est pas le cas. Ils fonctionnent uniquement après avoir cliqué sur le composant avec la souris. Alors, qu'est-ce que je fais mal? Comment faire la liste avoir le focus et répondre aux touches de direction?

Était-ce utile?

La solution

Votre application est-elle exécutée dans un navigateur? Vous devrez peut-être définir le focus sur l'objet SWF (via JavaScript) pour pouvoir commencer à interagir avec celui-ci sans d'abord cliquer sur l'objet.

Par exemple, si vous utilisez Flex Builder, essayez d’ajouter une ligne semblable à celle-ci à la fin de la balise SCRIPT de votre fichier index.template.html:

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

Vous devrez peut-être apporter quelques modifications en fonction de votre situation particulière, mais c'est probablement le problème. Définir le focus sur l'objet Flash explicitement devrait faire l'affaire. J'espère que ça aide!

Autres conseils

J'ai exécuté votre code et je pouvais parcourir la liste avec le clavier sans cliquer sur la liste , mais je devais cliquer quelque part sur l'application Flex pour que il reçoit le focus en premier lieu. Je pense que c’est une limitation du flash en général: le fichier SWF ne reçoit pas le focus du clavier, sauf si vous cliquez quelque part dessus (mouseOver sera toujours déclenché).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top