2012-12-19 4 views
8

Kể từ khi phát hành phiên bản Trình xác thực JQuery 1.9.0, các trường bị ẩn đã tự động bị bỏ qua khỏi kiểm tra xác thực [source].Xác thực JQuery: Xác thực các trường ẩn

Theo release notes, cách để giải quyết vấn đề này là bằng cách đặt ignore: [] trong hàm xác thực.

Sử dụng phiên bản 1.10.0, Tôi không thể làm việc này cho các trường nhập bị ẩn bằng cách sử dụng display: none hoặc visibility: hidden.

xác nhận của tôi được thực hiện sử dụng các lớp học (ví dụ, class="required") và chức năng xác nhận là khá cơ bản:

JQuery

$("form").validate({ 
    ignore: [], 
    errorPlacement: function(error, element) { 
     error.appendTo($('#error-message')) 
    }, 
    invalidHandler: function() { 
     //do something 
    }, 
    submitHandler: function() { 
     //do something else 
    } 
}); 

dụ làm việc: http://jsfiddle.net/fbCVY/

Bất cứ ai có điểm nơi tôi đang đi sai?

+0

Khi tôi chạy jsfiddle trong Firefox 17.0.1, nút 'submit' luôn hiển thị" không có lỗi "trong bảng điều khiển - ngay cả sau khi xóa CSS ẩn các trường nhập. Tôi có thiếu một cái gì đó, hoặc là jsfiddle không thực sự thiết lập để không xác nhận? – TLS

Trả lời

6

Tôi nghĩ bạn cần cung cấp cả một số id duy nhất và thuộc tính name duy nhất cho mỗi thẻ input để plugin xác thực có thể tìm thấy các trường và có thể phân biệt chúng. Hai trường "ẩn" không bị lỗi xác thực vì trường đầu tiên trên biểu mẫu chuyển và kết quả đó đang được sử dụng cho hai trường khác.

+1

[Đây là một jsfiddle đang hoạt động] (http://jsfiddle.net/fbCVY/1/) – TLS

+0

+1 tuyệt vời - có vẻ hơi lạ một chút khi chúng dựa vào các id. Cảm ơn các giải pháp! –

+2

nó chỉ là tên đầu vào cần –

2

Hãy thử với các quy tắc:

$("form").validate({ 
    ignore: "", 
    rules: { 
     name: ["aa", "ee"] 
    }, 
    errorPlacement: function(error, element) { 
     error.appendTo($('#error-message')) 
    }, 
    invalidHandler: function() { 
     //do something 
    }, 
    submitHandler: function() { 
     //do something else 
    } 
}); 

Jsfiddle

Greetings.

+0

Cảm ơn - nó không thực sự là quy tắc tôi cần, tôi đã bỏ thuộc tính 'name' gây ra vấn đề (vì vậy jsfiddle của bạn hoạt động, nhưng đó là vì bạn đã thêm thuộc tính' name' để đầu vào hơn là cần các quy tắc): http://jsfiddle.net/fbCVY/14/ –

+1

Ok, thuộc tính "name" giải quyết vấn đề này. –