Vì vậy, tôi sẽ đi sâu hơn một chút về lý do tại sao điều này không hoạt động bởi vì tôi là kiểu người không thể ngủ vào ban đêm mà không biết haha. Tôi đang sử dụng jQuery xác thực 1.10 và Xác thực không giới hạn Microsoft jQuery 2.0.20710.0 được xuất bản vào ngày 1/29/2013.
Tôi đã bắt đầu bằng cách tìm kiếm phương thức setDefaults trong Xác thực jQuery và tìm thấy nó trên dòng 261 của tệp chưa được tối ưu hóa. Tất cả chức năng này thực sự là hợp nhất các cài đặt json của bạn vào hiện $.validator.defaults
có được khởi tạo với thuộc tính bỏ qua được đặt thành ": hidden" cùng với các mặc định khác được xác định trong Xác thực jQuery. Vì vậy, tại thời điểm này, chúng tôi đã ghi đè bỏ qua. Bây giờ hãy xem tài sản mặc định này đang được tham chiếu tại.
Khi tôi truy tìm mã để xem nơi $.validator.defaults
đang được tham chiếu. Tôi nhận thấy rằng chỉ được sử dụng bởi hàm tạo cho trình xác thực mẫu, dòng 170 trong jQuery xác thực tệp chưa được xác thực.
// constructor for validator
$.validator = function( options, form ) {
this.settings = $.extend( true, {}, $.validator.defaults, options );
this.currentForm = form;
this.init();
};
Tại thời điểm này, trình xác nhận sẽ hợp nhất mọi cài đặt mặc định đã được đặt và đính kèm với trình xác thực mẫu. Khi bạn nhìn vào mã đang thực hiện xác nhận, tô sáng, làm nổi bật, v.v ... tất cả đều sử dụng đối tượng validator.sinstall để kéo thuộc tính bỏ qua. Vì vậy, chúng ta cần đảm bảo rằng nếu chúng ta thiết lập bỏ qua với phương thức setDefaults thì nó phải xảy ra trước khi $ ("biểu mẫu"). Validate () được gọi.
Nếu bạn đang sử dụng Asp.net MVC và plugin không phô trương, thì bạn sẽ nhận ra sau khi xem javascript mà xác thực được gọi trong document. Yet. Tôi cũng đã gọi setDefaults của mình trong tài liệu. Khối đã được thực thi sau tập lệnh, jquery xác thực và không phô trương vì tôi đã xác định các tập lệnh đó trong html trước khi có lệnh gọi trong đó. Vì vậy, cuộc gọi của tôi rõ ràng không có tác động đến chức năng mặc định bỏ qua các yếu tố ẩn trong quá trình xác nhận. Có một vài lựa chọn ở đây.
Tùy chọn 1 - Bạn có thể như Juan Mellado đã chỉ ra có cuộc gọi bên ngoài tài liệu. Đã thực hiện ngay khi tập lệnh được tải. Tôi không chắc chắn về thời gian của việc này vì các trình duyệt hiện có khả năng tải tập lệnh song song. Nếu tôi quá thận trọng thì xin hãy sửa cho tôi. Ngoài ra, có lẽ có những cách xoay quanh vấn đề này nhưng vì nhu cầu của tôi, tôi đã không đi theo con đường này.
Lựa chọn 2a - Đặt cược an toàn trong mắt tôi là chỉ cần thay thế $.validator.setDefaults({ ignore: '' });
bên trong tài liệu $("form").data("validator").settings.ignore = "";
. Đã có sự kiện . Điều này sẽ sửa đổi thuộc tính bỏ qua được xác thực bởi jQuery xác thực khi thực hiện mỗi xác thực trên các thành phần của bạn cho biểu mẫu đã cho.
Tùy chọn 2b - Sau khi xem mã nhiều hơn một chút, bạn cũng có thể sử dụng $("form").validate().settings.ignore = "";
làm cách đặt thuộc tính bỏ qua. Lý do là khi nhìn vào hàm xác thực, nó sẽ kiểm tra xem một đối tượng trình xác nhận đã được lưu trữ cho phần tử biểu mẫu thông qua $.data()
hàm chưa. Nếu nó tìm thấy một đối tượng trình xác nhận được lưu trữ với phần tử biểu mẫu thì nó chỉ trả về đối tượng trình xác nhận thay vì tạo một đối tượng khác.