Cách tốt nhất để xác thực nhập văn bản HTML khi nhập văn bản là gì? Tất cả những cách tôi biết làm nó có một số nhược điểm:Xác thực nhập văn bản html khi được nhập
Sử dụng
$.keypress
bạn chỉ có thể truy cập giá trị cũ của đầu vào, không phải là người mới. Ngoài ra, một số sự kiện (như cắt/dán bằng chuột) sẽ không được phát hiện.Sử dụng
$.change
chỉ hoạt động khi đầu vào bị mất tiêu điểm.This question đề xuất giải pháp, nơi bạn sử dụng bỏ phiếu để xem các thay đổi về tài sản. Về nguyên tắc, có thể xác thực giá trị mới trong cuộc gọi lại, sau đó hoàn nguyên về giá trị cũ nếu không hợp lệ. Tuy nhiên, bên cạnh yêu cầu bỏ phiếu, tôi không chắc nó không có điều kiện chủng tộc.
This article đề xuất sử dụng các tính năng cụ thể của trình duyệt khi có mặt, quay lại bỏ phiếu nếu không có tính năng nào. Có vẻ như cách tiếp cận tốt nhất cho đến nay.
[Cập nhật] như chỉ trong các câu trả lời,
$.keyup
cung cấp cho truy cập vào các giá trị sau khi cập nhật. Tuy nhiên, không chỉ nó không hoạt động để cắt/dán chuột, nhưng cũng không thành công nếu bạn bấm và giữ một phím, chỉ phát hành sau khi đã nhập rất nhiều. Hoặc, nếu kết hợpkeydown
vàkeyup
để lưu/khôi phục giá trị cũ, nó sẽ bị hỏng nếu người dùng nhập quá nhanh.
Không có giải pháp nào ở trên là trình duyệt chéo lỗi hoặc thực sự an toàn. Có giải pháp nào tốt hơn ở đó, sẵn sàng sử dụng hoặc đang trong quá trình sản xuất không? Dường như là một vấn đề phổ biến, tôi đã cố gắng trả lời similarquestions gần đây, không thành công và tôi cũng quan tâm đến câu trả lời.
(Đối số tốt đối với thực hành này cũng được hoan nghênh, trong trường hợp có vấn đề mới điều cần muốn)
Đây là câu trả lời tốt nhất mà tôi tìm thấy cho đến nay, và tôi đã viết [ví dụ này] (http://jsfiddle.net/mgibsonbr/NJNkc /) dựa trên nó. Làm việc tuyệt vời trên FF, Chrome và Safari, kinda đã làm việc trên IE6 (thỉnh thoảng bị tràn stack, nhưng ai quan tâm đến IE6), nhưng thất bại trên Opera (và Konqueror, nhưng tôi cũng không quan tâm lắm đến nó). Vì vậy, tôi để lại câu hỏi mở cho một số thời gian hơn ... – mgibsonbr
@mgibsonbr - dường như làm việc trong Opera 11,61 cho tôi. Chính xác ví dụ này làm gì? – mrtsherman
Nó cố gắng chỉ cho phép người dùng nhập số hợp lệ, nhưng vì điều này là không thể (trong khi người dùng vẫn đang nhập, giá trị * sẽ * không hợp lệ), nó cũng chấp nhận tiền tố hợp lệ (hiển thị đường viền màu đỏ nếu toàn bộ văn bản không có hiệu lực). Vì vậy, nếu người dùng cố gắng thêm hoặc xóa các ký tự sẽ làm cho đầu vào không hợp lệ, nó sẽ hoàn nguyên về giá trị đã lưu cuối cùng. Nếu không, nó sẽ lưu giá trị mới. (Không nhất thiết phải làm gì đó trong một hệ thống thực, mặc dù - xem nnnnnn's [answer] (http://stackoverflow.com/a/9205475/520779)) Ví dụ thất bại trên Opera 10.63, nhưng vì nó hoạt động trên các phiên bản mới hơn , tốt rồi! – mgibsonbr