2009-01-20 25 views
9

Trong Flex 3, các nút gọi trình xử lý nhấp chuột của chúng khi chúng được nhấp vào bằng chuột hoặc khi chúng có tiêu điểm và người dùng sẽ nhấn thanh dấu cách.Cách tốt nhất để gây ra nút Flex 3 để phản hồi phím enter là gì?

Có cách nào đơn giản để gây ra các nút Flex 3 có tiêu điểm để gọi trình xử lý nhấp chuột của họ khi người dùng nhấn phím enter không?

Trả lời

8

Chắc chắn, bạn có thể làm một cái gì đó như thế này:

<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)" /> 

... mặc dù tôi không phải là một fan hâm mộ lớn của cử các sự kiện trên các đối tượng bên ngoài của các đối tượng. Một cách tiếp cận rõ ràng hơn có thể là phân lớp Button, thêm các trình lắng nghe và các trình xử lý bên trong lớp con của bạn, và sau đó gửi sự kiện click từ bên trong lớp đó. Nhưng điều này sẽ giúp minh họa quan điểm. Chúc may mắn!

0

Hãy thử sự kiện "buttonDown"; nó có thể được gửi đi trong cả hai trường hợp. Nếu không, bạn có thể đang xem sử dụng "keyDown" và kiểm tra phím đã được nhấn.

3

Đối với một cái gì đó giống như một hình thức đăng nhập, bạn cần phải thực sự sử dụng một mx: hình thức - đây là đoạn mã minh họa nó:

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

Nhập url và nhấn enter, bam, hành vi mong đợi.

google từ here.

+0

nếu biểu mẫu có nhiều hơn một nút thì sao? Mà bị ràng buộc để nhập? – Herms

+1

Xem thuộc tính defaultButton của phần tử biểu mẫu. Tuy nhiên, điều này chắc chắn không phải là giải pháp mà các poster câu hỏi đã được tìm kiếm. –

1

Thậm chí tốt hơn

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

Nếu bạn đang gửi một hình thức giống như một hộp thoại Login hoặc tương tự, "enter" tài sản trên TextField là một giải pháp tuyệt vời:

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

0

tôi đã được nhìn vào cùng một vấn đề nhưng câu trả lời từ Christian Nunciato dường như là tôi là tốt nhất. Một điều nữa để thêm vào giải pháp của anh ấy, tôi nghĩ rằng cờ sủi bọt, trong btn.dispatchEvent(new MouseEvent(MouseEvent.CLICK)), phải được đặt thành false (btn.dispatchEvent(new MouseEvent(MouseEvent.CLICK, false))) vì sự kiện phải được cô lập trên nút.

1

Bạn cũng có thể thêm người nghe KEY_DOWN vào câu trả lời của Christian cho chính nút đó. Chỉ cần chắc chắn rằng bạn gọi stopImmediatePropagation. Trong ví dụ này, tôi cho phép bất kỳ phím nào gây ra hành động nút. Và tôi đang sử dụng cùng một trình xử lý để tôi cho phép bất kỳ loại "Sự kiện" nào. Bạn có thể sử dụng các trình xử lý "cancelClick" khác nhau.

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); 
    } 
} 
Các vấn đề liên quan