2009-07-10 9 views
2

J'essaie de gérer un événement de mise au point sur un TextField afin que je puisse sélectionner tout le texte lors de la mise au point (onglet ou clic). On dirait que je fais quelque chose de mal ici?AS3: TextField Focus

txtTextField.addEventListener(FocusEvent.FOCUS_IN, handleFocusIn); 
function handleFocusIn() { 
//select all text here 
} 

Répondre

4

Votre handleFocusIn doit avoir la signature

function handleFocusIn(event:FocusEvent) // or just Event 
2

j'ai eu un problème similaire à la phase prototype d'un développement (en Flash). Un champ de texte ne tirait pas du tout sur les événements FocusEvent.FOCUS_OUT. Le problème était que j'avais un composant Button sur la scène. Dès que j'ai remplacé cette instance de composant Button Flash avec un bouton personnalisé créé à partir de zéro, je l'ai eu à travailler. Je n'ai pas été en mesure de trouver ce bug et la solution sur Internet. Avec un composant Button sur scène, j'obtiens l'événement FOCUS_IN seulement la première fois que je clique dessus. Après cela, je ne reçois ni les événements FOCUS_OUT ni les événements FOCUS_IN déclenchés. J'espère que cela aidera quelqu'un de quelque façon que ce soit.

5

J'avais besoin de la même chose, pour sélectionner le contenu d'un champ de texte lorsqu'il reçoit le focus.

J'ai essayé:

A) Il suffit de sélectionner après une FocusEvent. Cela ne semble pas fonctionner (je suppose que FocusEvents est déclenché avant que le clic de la souris ne soit en cours de traitement, ce qui annulera la sélection). B) Sélection à chaque clic de souris. Cela fonctionne, mais c'est très ennuyeux pour un utilisateur qui ne veut sélectionner qu'une partie du texte plus tard, car cette tentative aura toujours comme conséquence -all- le contenu sélectionné.

La solution suivante semble fonctionner si:

myTextField.addEventListener(MouseEvent.CLICK, selectAllOnce); 

    function selectAllOnce(e:MouseEvent) { 
     e.target.removeEventListener(MouseEvent.CLICK, selectAllOnce); 
     e.target.addEventListener(FocusEvent.FOCUS_OUT, addSelectListener); 
     selectAll(e); 
    } 

    function addSelectListener(e:FocusEvent) { 
     e.target.addEventListener(MouseEvent.CLICK, selectAllOnce); 
     e.target.removeEventListener(FocusEvent.FOCUS_OUT, addSelectListener); 
    } 

    function selectAll(e:Event) { 
     e.target.setSelection(0, e.target.getLineLength(0)); 
    } 

espoir qui aide. Personnellement, je pense que ce serait plus logique si adobe ajoutait simplement une option pour cela pour l'objet TextField.

2

Je fais mon handler comme ceci. Fonctionne comme un charme:

private function onFocusIn(e:FocusEvent):void 
{ 
    setTimeout(title.setSelection, 100, 0, e.target.text.length);   
} 
0

vous pouvez trouver l'utilisateur ne sélectionne qu'une partie du texte comme celui-ci:

private function clickHandler(e:MouseEvent){ 
    if(tfield.selectionBeginIndex == tfield.selectionEndIndex){ 
     tfield.setSelection(0, tfield.length); 
    } 
} 
0

La solution est simple:

import flash.events.Event; 
import flash.events.MouseEvent; 
import flash.events.FocusEvent; 

tf.addEventListener(FocusEvent.FOCUS_IN, handleFocusIn); 

function handleFocusIn(e:FocusEvent):void 
{ 
    tf.addEventListener(MouseEvent.MOUSE_UP, preventLosingSelection); 
    tf.setSelection(0, tf.length); 
    stage.focus = tf; 
} 

function preventLosingSelection(e:MouseEvent):void 
{ 
    tf.removeEventListener(MouseEvent.MOUSE_UP, preventLosingSelection); 
    tf.setSelection(0, tf.length); 
    stage.focus = tf; 
} 

Hope this aide pour quelqu'un à l'avenir!