2011-12-15 33 views
5

Tôi đang sử dụng JQuery Validation plugin để xử lý xác thực biểu mẫu.Xác thực JQuery: Xác thực biểu mẫu ẩn (lỗi có thể)

Sự cố tôi gặp phải là khi biểu mẫu bị ẩn, plugin xác thực bỏ qua các trường cần được xác thực và chuyển thẳng để gửi biểu mẫu.

Ví dụ: http://jsfiddle.net/Qg5WQ/

Tôi đã có một cái nhìn thông qua plugin của options và googled vấn đề này nhưng tôi không thể tìm thấy bất cứ điều gì mà xác định lý do tại sao các lĩnh vực trong một hình thức ẩn được bỏ qua. Cần lưu ý rằng nếu có hai biểu mẫu trên một trang, trong đó một biểu mẫu bị ẩn và một biểu mẫu được hiển thị, cả hai biểu mẫu đều được xác thực thành công nếu cả hai biểu mẫu đều sử dụng cùng một phương thức xác thực. Tuy nhiên, nếu bạn gọi hai phương thức xác nhận riêng biệt thì các trường trong biểu mẫu ẩn vẫn bị bỏ qua.

Members hai hình thức sử dụng chức năng xác nhận tương tự: http://jsfiddle.net/Qg5WQ/1/

Members hai hình thức sử dụng chức năng xác nhận khác nhau: http://jsfiddle.net/Qg5WQ/2/

Có ai biết nếu điều này là một lỗi hoặc là có một cụ thể cách để xác nhận các biểu mẫu ẩn?

+0

tôi đang đối mặt với cùng một vấn đề, vì vậy tôi đang tạo mã của riêng mình để xác thực biểu mẫu. (khi tôi ở dạng web .aspx) – manny

Trả lời

11

Cố gắng này http://jsfiddle.net/Qg5WQ/3/

tôi thêm ignore: Tùy chọn hidden đến validate gọi.

$("form").validate({ 
    ignore: 'hidden', 
    rules: { 
    "first": "required" 
    }, 
    invalidHandler: function() { 
    alert("error"); 
    }, 
    submitHandler: function(form) { 
    alert("no error"); 
    } 
}); 
+0

Cảm ơn, điều đó thật kỳ quặc. Tôi dường như có thể thêm bất cứ điều gì vào lĩnh vực bỏ qua và nó hoạt động. Tôi đoán điều này buộc nó phải lặp lại thông qua các lĩnh vực mà làm cho tôi nghĩ rằng đây phải là một lỗi. Cảm ơn đã giúp đỡ! –

+0

@ MyHeadHurts - Có, tôi nhận thấy rằng, rất lạ, nhưng tốt nó hoạt động anyway =) – Cyclonecode

+3

Chỉ cần lưu ý nhanh rằng lý do này hoạt động là vì bạn đang thiếu dấu hai chấm từ phía trước **: hidden **. Về cơ bản, bạn đang yêu cầu bỏ qua bất kỳ thẻ html ** ** nào có thể tồn tại thay vì yêu cầu bỏ qua các đầu vào của loại bị ẩn. – Dominic

7

Nếu bạn kiểm tra ignore tùy chọn trên documentation page, nó nói rằng giá trị mặc định là :hidden. Điều này rõ ràng có nghĩa là nếu bạn không chỉ định tùy chọn ignore một cách rõ ràng, việc xác thực sẽ bỏ qua các đầu vào bị ẩn.

Chỉ cần xác định tùy chọn ignore (có thể để trống) và nó sẽ khắc phục sự cố.

$("form").validate({ 
    ignore: '', 
    rules: {"hidden_field": {required:true}} 
}); 
+0

+1 - cảm ơn, điều đó giải thích lý do tại sao thêm bất cứ điều gì vào bỏ qua vẫn hoạt động –

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