2010-09-26 24 views
8

Tôi đang sử dụng plugin Xác thực jQuery để xác thực biểu mẫu. Bạn có biết cách buộc xác nhận lại trên trường thành công trước đây không?Plugin xác thực jQuery: Làm thế nào tôi có thể bắt buộc xác thực trên các trường hợp lệ trước đây?

Tôi đã thử chức năng .form sử dụng việc kiểm tra sau (điều này được thực hiện sau khi người dùng nhấp 'submit'):

if ($('#form1').validate().form()==false) 
{ 
    formValid = false; 
} 

Tuy nhiên, dường như đoạn code trên không thử lại xác nhận để các lĩnh vực mà đã được xác thực thành công (tức là có đánh dấu bên cạnh chúng) không được kiểm tra lại.

Lý do muốn thử lại xác nhận lại trên các trường thành công trước đây là họ dựa vào xác thực từ xa và kết quả (thành công hay thất bại) có thể thay đổi giữa người dùng rời khỏi trường và nhấp vào gửi. (Điều này áp dụng cho trường 'tên người dùng').

Trong trường hợp ảnh hưởng đến câu trả lời, tôi có nhiều biểu mẫu để xác thực (để đơn giản, trong đoạn mã ở trên tôi chỉ tham chiếu đến '# form1').

Cảm ơn trước cho lời khuyên nào,

Rob

Trả lời

17

Nhà nước xác nhận cho các lĩnh vực từ xa được lưu trữ qua $.data() với các yếu tố bạn muốn xác nhận, vì vậy bạn có thể sử dụng .removeData() để xóa mà ra .. .so nó buộc phải hợp lệ lại:

$("#form1 :input").removeData("previousValue"); 
//now call .valid() 

này buộc kiểm tra nếu giá trị đã thay đổi (chúng ta cần phải hợp lệ lại) là true:

//This code is in the validation plugin for remote: 
var previous = this.previousValue(element); 
if (previous.old !== value) { //this is normally false, since it hasn't changed 

Nếu chỉ có trường cụ thể cần xác thực lại, như tên người dùng đã nói, bạn có thể muốn thu hẹp bộ chọn $("#form1 :input") chỉ với các trường bạn muốn, để làm cho nó hiệu quả hơn một chút.

+0

Tuyệt vời - điều này sẽ xóa xác nhận một cách hoàn hảo, nhờ Nick ... mặc dù vấn đề khác đã nảy sinh! Bởi vì nó bây giờ là revalidating tất cả các hình thức tôi nhận được một lỗi trong javascript: "Không thể tải tài nguyên: bị hủy bỏ". Vấn đề chỉ xảy ra khi tôi có nhiều biểu mẫu trên trang (đó là hành động do người dùng điều khiển, vì các biểu mẫu được tạo động). Bất kỳ đề xuất? – Rob

+0

@Rob - Tôi sẽ chỉ xóa các tùy chọn từ xa với điều này, nó sẽ tiết kiệm được những cơn đau đầu nhất, bạn có thể làm điều đó với một bộ chọn cụ thể hơn tôi có ở trên không? Ngoài ra, tôi chỉ tái xác thực tài khoản bạn đang gửi. –

+0

từ một số gỡ lỗi có vẻ như lỗi "Không thể tải tài nguyên" xảy ra khi .validate(). Form() được gọi đồng thời cho hai đầu vào biểu mẫu có cùng tên. Tôi cần phải kiểm tra tất cả các đầu vào khi gửi để thậm chí có bộ chọn cụ thể nhất vẫn tạo ra sự cố. Lỗi không xảy ra nếu tôi gọi .validate(). Form() theo cách thủ công trên mỗi biểu mẫu theo tuần tự với hành động do người dùng điều khiển (ví dụ: nhấp vào nút 'xác thực') ... vì vậy có vẻ như tôi cần phải xác thực biểu mẫu theo trình tự (tức là chỉ gọi xác thực của biểu mẫu tiếp theo khi xác nhận thành công lần đầu tiên) ... bất kỳ đề xuất nào? – Rob

0

Tôi đã đưa ra câu trả lời này khi tôi đang xem xét việc sử dụng tính năng xác thực không phô trương của jQuery từ xa. Đó không phải là chủ đề tài liệu hay nhất trên thế giới và cũng không phải là không có tiếng lạ. Vì vậy, nhiều để tôi đã kết thúc viết một bài đăng blog về những gì tôi đã học được. Liên kết ở đây trong trường hợp hữu ích:

http://icanmakethiswork.blogspot.com/2012/03/jquery-unobtrusive-remote-validation.html

Các vấn đề liên quan