Tôi có nên sử dụng sự kiện change
hoặc textInput
để nắm bắt dữ liệu nhập của người dùng trên điều khiển TextInput không? Tại sao?Ghi lại đầu vào của người dùng từ điều khiển Flex TextInput: sự kiện nào cần sử dụng?
Trả lời
textInput
chỉ được gửi khi người dùng có văn bản nhập vào điều khiển. change
, mặt khác, được gửi đi theo mọi thay đổi do người dùng cam kết. Vì vậy, ví dụ, nếu người dùng xóa một phần của văn bản, chỉ có sự kiện change
được gửi đi.
Không những là phái khi văn bản được sửa đổi thông qua mã:
flash.events.TextEvent.TEXT_INPUT
:
"cử đến khi người dùng loại, xóa, hoặc bột nhão văn bản vào kiểm soát."
(bỏ qua từ "xóa" đó - Tôi chỉ cố gắng nó và sự kiện này là không cử khi văn bản bị xóa bởi người sử dụng)
"Được gửi đi khi văn bản trong điều khiển TextInput thay đổi thông qua đầu vào của người dùng . Sự kiện này không xảy ra nếu bạn sử dụng liên kết dữ liệu hoặc ActionScript mã để thay đổi văn bản. "
Bạn cũng có thể sử dụng các sự kiện valueCommit
, được cử khi người dùng "cam kết" những thay đổi (thường là bằng cách di chuyển trọng tâm ra khỏi lĩnh vực văn bản), nhưng hãy nhớ rằng sự kiện này cũng được gửi đi khi lĩnh vực này giá trị được thay đổi theo chương trình.
Đó là câu trả lời tuyệt vời, hasseg. Nếu tôi có đủ đại diện, tôi sẽ bỏ phiếu.
Tùy thuộc vào nội dung bạn đang nhập vào của người dùng, bạn có thể phân lớp thành phần TextInput và ghi đè trình lắng nghe nội bộ cho sự kiện thay đổi và textInput.
Tôi không biết nếu có nhiều lý do bạn muốn làm điều này, nhưng tôi đã làm nó gần đây để đối phó với một lỗi trong OS X gây ra dấu ngắt dòng được đại diện là '\ r', thay vì '\ n'.
Tất cả bạn cần làm là thêm sau siêu của bạn() gọi sau trong constructor của đối tượng subclassed của bạn:
this.addEventListener(Event.CHANGE, textFieldChangeListener);
this.addEventListener(TextEvent.TEXT_INPUT,textFieldInputListener);
Và sau đó thêm các phương pháp nghe và mã bạn muốn thực hiện.
Cả sự kiện Event.CHANGE và TextEvent.TEXT_INPUT đều kích hoạt trên mỗi ký tự được nhập. Nếu bạn muốn một sự kiện sẽ chỉ kích hoạt một lần duy nhất cho một trường TextInput đã cho, hãy sử dụng FocusEvent.FOCUS_OUT.
Giống như Event.CHANGE và TextEvent.TEXT_INPUT, sự kiện này sẽ chỉ kích hoạt cho đầu vào của người dùng, không phải cho các thay đổi có lập trình cho giá trị.
Tôi nhận ra rằng sau khi đệ trình điều này, việc sử dụng FOCUS_OUT không phải là một cách tiếp cận tuyệt vời bởi vì, trong khi đúng là nó chỉ được kích hoạt một lần cho mỗi trường, nó sẽ cho bạn biết liệu người dùng có thay đổi giá trị hay không. – hrabinowitz
Vì vậy, có vẻ như, như hasseg đã lưu ý ở trên, CHANGE là lựa chọn tổng thể tốt nhất để lắng nghe những thay đổi của người dùng đối với một trường TextInput. Tuy nhiên, nếu người dùng gõ control-C để sao chép giá trị trường, điều này cũng sẽ kích hoạt sự kiện CHANGE. – hrabinowitz
CHANGE
không cho bạn biết những gì đã thay đổi mặc dù - TEXT_INPUT
và KEY_DOWN
làm.
Tuy nhiên, bạn có thể lấy toàn bộ văn bản từ TextInput khi xử lý sự kiện CHANGE nếu bạn cần sử dụng kết quả cuối cùng cho một cái gì đó. –
- 1. Làm cách nào để biết sự kiện đến từ đầu vào của người dùng trong C#?
- 2. Thêm điều khiển vào Điều khiển người dùng động
- 3. WPF - Xử lý sự kiện từ điều khiển người dùng trong Chế độ xem
- 4. Cách thêm điều khiển người dùng vào bảng điều khiển
- 5. Khi nào cần đăng nhập vào sổ ghi sự kiện?
- 6. C# đọc đầu vào của người dùng mà không cần dừng ứng dụng
- 7. Phân tích cú pháp đầu vào của người dùng cho câu lệnh điều kiện JavaScript
- 8. Lấy đầu vào từ cần điều khiển bằng C# .NET
- 9. Winform - sự kiện cuối cùng của người dùng điều khiển để kích hoạt
- 10. Ghi lại sự kiện KeyUp trên biểu mẫu khi điều khiển con đã tập trung
- 11. Xác định nếu sự kiện đã thay đổi xảy ra từ đầu vào của người dùng hoặc không
- 12. Làm cách nào để lấy sự kiện từ các điều khiển phụ trên điều khiển người dùng trong ứng dụng WinForms?
- 13. Trả lại dữ liệu cho người điều phối từ người quan sát sự kiện trong Magento
- 14. MVC: Mô hình hoặc Bộ điều khiển có hợp lệ hóa đầu vào của người dùng
- 15. Cách xóa dòng mới khỏi đầu vào bảng điều khiển của người dùng
- 16. Cách nhận EventLog để ghi tên người dùng vào Nhật ký sự kiện Window?
- 17. Tự động thêm điều khiển người dùng vào bộ lặp
- 18. Điều khiển người dùng được nạp động với Trình xử lý sự kiện - Hủy đăng ký
- 19. Kích hoạt sự kiện khi người dùng điều hướng đi
- 20. Chọn nút radio dựa trên đầu vào của người dùng trong trình điều khiển web Selenium
- 21. Panel Control Paint Sự kiện không hoạt động cho điều khiển người dùng
- 22. Cách sử dụng Điều khiển người dùng trong WPF MVVM
- 23. Làm thế nào để tránh lặp lại dòng mới khi đọc đầu vào của người dùng?
- 24. JavaScript: Cách nhận giá trị của phần tử đầu vào người gửi từ sự kiện khóa?
- 25. Đọc đầu vào từ bảng điều khiển trong OSX
- 26. Di chuyển điều khiển người dùng xung quanh trong một điều khiển người dùng khác
- 27. Giải thích mã cho sự kiện tùy chỉnh trong điều khiển người dùng
- 28. Sự kiện nạp lửa điều khiển người dùng WPF hai lần
- 29. Sử dụng quá nhiều ASP.Net của các Điều khiển Người dùng
- 30. Ghi lại kết quả đầu ra qua sự kiện OutputDataReceived
Cảm ơn rất nhiều vì câu trả lời rõ ràng. Lưu ý: Tôi đã thực hiện một số kiểm tra và thấy rằng khi truy cập thuộc tính 'text' trong trình xử lý sự kiện cho sự kiện' textInput' (sử dụng 'event.currentTarget.text'), giá trị tôi nhận được phản ánh giá trị' text' _before_ nhấn phím đã kích hoạt sự kiện. –
Điều đó không đúng đối với tôi, ít nhất là không phải trong Flex 4.5 (tôi đoán Flex 4 quá) bằng cách sử dụng Spark TextInput. Tôi nhận được giá trị văn bản cuối cùng trong sự kiện thay đổi, cũng có một sự kiện thay đổi được gửi đi trước đó. – Enrique