2009-07-10 10 views
2

Ich versuche, ein Fokusereignis auf einem TextField zu behandeln, damit ich den gesamten Text beim Fokussieren auswählen kann (Tab oder Klick). Scheint, als würde ich hier etwas falsch machen?AS3: TextField Fokus

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

Antwort

4

Ihre handleFocusIn sollte die Signatur haben

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

hatte ich ein ähnliches Problem bei der Prototypenphase einer Entwicklung (in Flash). Ein Textfeld hat FocusEvent.FOCUS_OUT-Ereignisse überhaupt nicht ausgelöst. Das Problem war ich hatte eine Button-Komponente auf der Bühne. Sobald ich diese Flash-Button-Komponente-Instanz mit einem benutzerdefinierten Button ersetzt habe, der von Grund auf neu erstellt wurde, habe ich es zum Laufen gebracht. Ich konnte diesen Fehler und die Lösung nicht über das Internet finden.

Mit einer Button-Komponente auf der Bühne bekomme ich FOCUS_IN nur beim ersten Mal, wenn ich darauf klicke. Danach bekomme ich weder FOCUS_OUT noch FOCUS_IN Events gefeuert.

Ich hoffe, dass dies jemand in irgendeiner Weise helfen würde.

5

Ich brauchte das gleiche, um den Inhalt eines Textfelds auszuwählen, wenn es den Fokus erhält.

Ich habe versucht:

A) einfach nach einem Focus auswählen. Dies scheint nicht zu funktionieren (meine Vermutung ist, dass FocusEvents ausgelöst werden, bevor der Mausklick verarbeitet wird, was wiederum die Auswahl rückgängig macht).

B) Auswahl bei jedem Mausklick. Das funktioniert, aber das ist sehr ärgerlich für einen Benutzer, der später nur einen Teil des Textes auswählen möchte, da dieser Versuch immer dazu führt, dass alle Inhalte ausgewählt werden.

Die folgende Abhilfe scheint allerdings zu arbeiten:

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)); 
    } 

Hoffnung, das hilft. Ich persönlich denke, es wäre am logischsten, wenn Adobe für das TextField-Objekt einfach eine Option hinzufügen würde.

2

Ich mache meine Handler so. Funktioniert wie ein Zauber:

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

Sie können Benutzer finden, ist nicht nur ein Teil des Textes wie diese Auswahl:

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

Die einfache Lösung ist:

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; 
} 

Hoffnung diese Hilfe für jemand in der Zukunft!