2009-01-20 7 views

Respuesta

8

Claro, usted podría hacer algo como esto:

<mx:Script> 
    <![CDATA[ 
     import mx.controls.Alert; 

     private function btn_click(event:MouseEvent):void 
     { 
      Alert.show("Clicked!"); 
     } 

     private function btn_keyDown(event:KeyboardEvent):void 
     { 
      if (event.keyCode == Keyboard.ENTER) 
       btn.dispatchEvent(new MouseEvent(MouseEvent.CLICK)); 
     } 
    ]]> 
</mx:Script> 

<mx:Button id="btn" label="Click Me" click="btn_click(event)" keyDown="btn_keyDown(event)" /> 

... aunque no soy un gran fan de envío de eventos en objetos fuera de esos objetos. Un enfoque más limpio podría ser una subclase botón, añadir los oyentes y manejadores dentro de su subclase, y luego distribuir el evento clic desde dentro de esa clase. Pero esto debería ayudar a ilustrar el punto. ¡Buena suerte!

0

Prueba el evento "buttonDown"; puede ser enviado en cualquier caso. De lo contrario, es probable que estés mirando usando "keyDown" y verificando la tecla que se presionó.

3

para algo así como un formulario de acceso, es necesario utilizar realmente un MX: forma - aquí está el fragmento de código que lo ilustra:

<mx:Form defaultButton="{loadButton}"> 
<mx:TextInput id="feedURL" /> 
<mx:Button id="loadButton" label="Load" click="someHandler(event)" /> 
</mx:Form> 

introducir la URL y pulsa enter, bam, comportamiento esperado.

Googled de here.

+0

¿Qué sucede si el formulario tiene más de un botón? Que se ve obligado a entrar? – Herms

+1

Vea el atributo defaultButton del elemento de formulario. Sin embargo, definitivamente esta no es la solución que el afiche de la pregunta ha estado buscando. –

1

Aún mejor

private function setValidationFocus(formObject:Object):void 
    { 
     formObject.setFocus(); 
     formObject.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_OUT)); // sneaky sneaky 
     formObject.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_OVER)); 
    } 
3

Si presenta una forma como un cuadro de diálogo Inicio de sesión o similar, el "enter" propiedad en el campo de texto es una gran solución:

<mx:TextInput displayAsPassword="true" id="wPassword" enter="handleLoginSubmit()"/>

0

I He visto el mismo problema, pero la respuesta de Christian Nunciato me parece que es la mejor. Una cosa más para agregar a su solución, creo que el indicador de burbujeo en btn.dispatchEvent(new MouseEvent(MouseEvent.CLICK)), debe establecerse en false (btn.dispatchEvent(new MouseEvent(MouseEvent.CLICK, false))) porque el evento debe estar aislado en el botón.

1

También puede agregar el oyente KEY_DOWN en la respuesta de Christian al botón. Solo asegúrate de llamar a stopImmediatePropagation. En este ejemplo, dejo que cualquier tecla cause la acción del botón. Y estoy usando el mismo controlador, así que permito cualquier tipo de "Evento". Puede usar diferentes manejadores "cancelClick".

protected function cancelClick(e:Event = null):void{ 
    this.dispatchEvent(new Event(Event.CANCEL)); // do component action 
    e.stopImmediatePropagation(); 
} 

override protected function partAdded(partName:String, instance:Object):void { 
    super.partAdded(partName,instance); 
    switch(instance){ 
     case cancel: 
      cancel.addEventListener(MouseEvent.CLICK,cancelClick); 
      cancel.addEventListener(KeyboardEvent.KEY_DOWN,cancelClick); 
    } 
} 
Cuestiones relacionadas