2009-05-14 8 views
2

Je suis nouveau sur Flash, et je ne peux pas sembler faire cette simple action.Flash: addEventListener ne détecte pas Coller les événements dans les zones de texte de saisie

(j'utilise ActionScript 3.0)

J'ai créé une zone de texte d'entrée dans mon éditeur. Le nom de l'instance est "test". Dans mon éditeur d'action, j'ai ceci:

import flash.events.Event; 
this.test.addEventListener(Event.PASTE, pasteHandler); 

function pasteHandler(e:Event) 
{ 
    trace("blaaaaaaaaaagh"); 
} 

Quand je lance, il ne détecte aucun de mes événements coller, si je fais Ctrl + V ou clic droit + coller. Si j'utilise un autre événement, comme MouseEvent.CLICK, il le détecte correctement. En fait, je ne pense pas que des événements Event.XXX (comme COPY, INIT, etc.) sont détectés (du moins ceux que j'ai essayés). Tous les événements MouseEvent et KeyboardEvent semblent fonctionner correctement.

Qu'est-ce que je fais mal?

+0

double possible de [Dispatch Coller l'événement en AS3] (http://stackoverflow.com/questions/16559409/ dispatch-paste-event-in-as3) –

Répondre

2

Les objets TextField ne distribuent pas les événements clear, copy, cut, paste ou SelectAll. Désolé pour les mauvaises nouvelles!

Tyler.

+0

Aw. Je suppose que je peux contourner cela. – user107312

+0

Vous pouvez l'étendre et ajouter cette fonctionnalité vous-même (vous devrez surveiller quelles touches sont enfoncées) mais la suggestion ci-dessous est bonne aussi. –

0

J'écouterais Event.CHANGE puisque le collage va changer le champ.

+0

Event.CHANGE ne semble pas se déclencher lorsque vous définissez myField.text = "foo". Existe-t-il une autre manière d'ajouter du texte à un champ qui provoque l'événement CHANGE? –

0

La solution est d'écouter TextEvent.TEXT_INPUT et prévenir le comportement par défaut:

textField.addEventListener(TextEvent.TEXT_INPUT, onTextInput); 

function onTextInput(e:TextEvent) : void 
{ 
    // this takes place of PASTE because Event.PASTE is not triggered on a textfield 
    var t:TextField = TextField(e.currentTarget); 
    t.replaceSelectedText(e.text); 
    e.preventDefault(); 
} 
Questions connexes