2010-02-19 29 views
9

Tôi muốn bắt nhập phím bấm khi người dùng đang điền vào trường nhập văn bản trong AS3. Tôi nghĩ tôi phải làm một việc như sau:Bắt nhập phím bấm trong trường nhập văn bản trong AS3

inputText.addEventListener(Event. ? , func); 
    function func(e:Event):void{ 
     if(e. ? == "Enter"){ 
      doSomething(); 
     } 
    } 

Nhưng tôi không thể tìm ra cách tốt nhất để làm điều này. Nhân tiện, văn bản đầu vào có giới hạn:

inputText.restrict = "0-9"; 

Tôi có nên thêm khóa nhập vào hạn chế không?

inputText.restrict = "0-9\n"; 

Xin cảm ơn trước.

Trả lời

34

Corrected trả lời

Bạn có thể dễ dàng nghe cho các sự kiện bàn phím xảy ra khi textfield là tập trung.

Chỉ cần thêm sự kiện KEY_DOWN trực tiếp vào trường văn bản và sau đó thực hiện bất cứ điều gì bạn muốn.

// get key presses only when the textfield is being edited 
inputText.addEventListener(KeyboardEvent.KEY_DOWN,handler); 
function handler(event:KeyboardEvent){ 

    // if the key is ENTER 
    if(event.charCode == 13){ 

     // your code here 
     doSomething(); 
    } 
} 

Trên một lưu ý riêng, textfields cũng gửi các sự kiện hữu ích khác:

  • Khi sửa đổi bởi người sử dụng (nếu là textfield đầu vào) - Event.CHANGE
  • Khi văn bản được gõ bằng người dùng (nếu đó là trường văn bản đầu vào) - TextEvent.TEXT_INPUT
  • Khi liên kết được nhấp (nếu văn bản HTML của nó) - TextEvent.LINK
  • Khi được người dùng cuộn (nếu có nhiều nội dung và nội dung don ' t fi t) - Event.SCROLL

Trước sai Trả lời:

Tôi nghĩ rằng cách duy nhất để thực sự làm những gì bạn muốn là một chút phức tạp.

Về cơ bản, bạn không thể nhận bất kỳ sự kiện nào từ TextField thông thường sẽ được kích hoạt khi nhấn phím Enter. Bạn phải làm việc xung quanh ...

Một ý tưởng sẽ là lắng nghe trường văn bản cho các sự kiện trọng tâm. Khi nó có tiêu điểm, bạn thêm một người nghe vào vùng hiển thị cho các sự kiện bàn phím và kiểm tra xem phím đã nhấn có được nhập hay không, nếu có thể kích hoạt hành động của bạn, hãy bỏ qua.

Mẫu mã:

inputText.addEventListener(FocusEvent.FOCUS_IN,textInputHandler); 
inputText.addEventListener(FocusEvent.FOCUS_OUT,textInputHandlerOut); 

function textInputHandler(event:FocusEvent):void { 
    //our textfield has focus, we want to listen for keyboard events. 
    stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler); 
} 

function textInputHandlerOut(event:FocusEvent):void { 
    //our textfield lost focus, remove our listener. 
    stage.removeEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler); 
} 

function keyDownHandler(e:KeyboardEvent):void{ 
    //a key was pressed, check if it was Enter => charCode 13. 
    if(e.charCode == 13){ 
     //ok, enter was pressed. Do your thing. 
     trace("We pressed enter, doSomething") 
    } 
} 
+1

Tôi đã sử dụng: inputText.addEventListener (KeyboardEvent.KEY_DOWN, handler); chức năng xử lý (sự kiện: KeyboardEvent) { nếu (event.charCode == 13) { doSomething(); } } Và nó hoạt động. Cảm ơn. –

+0

@ Jonathan - Tôi đã chỉnh sửa câu trả lời để phản ánh sự thật. –

+0

Hãy kiểm tra sự thật của bạn trước khi xuất bản những điều vô nghĩa như vậy, câu hỏi này đã hơn một tuổi, và hơn 4000 người đã bị lừa khi tin rằng những điều đơn giản như vậy rất khó. –

0

Bạn đang sử dụng trường văn bản hay TextInput?

TextInput gửi một sự kiện Enter khi nhấn enter. Bạn có thể tìm hiểu thêm về điều này tại số http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/fl/controls/TextInput.html#event:enter

Tôi không chắc chắn cách thức hoạt động của trường văn bản.

+0

tôi sử dụng các văn bản công cụ, và sau đó tôi đặt rằng hộp là một văn bản đầu vào. Tôi đã cố gắng sử dụng inputText.enter = function (e: Object) {bla} nhưng nó ném Lỗi # 1056: Không thể tạo thuộc tính nhập trong flash.text.TextField. Cảm ơn. –

2

Đối với những người tự hỏi làm thế nào để xử lý một "Enter" nhấn phím với một lĩnh vực TextInput chứ không phải là một TextField, đây là quá trình đơn giản:

import fl.events.ComponentEvent 

... 

myListeningField.addEventListener(ComponentEvent.ENTER, listenerMethod); 


function listenerMethod(e:Event):void{ 
    //DO SOME STUFF 
} 
Các vấn đề liên quan