6

Tôi cần phải thêm một tay cầm vào bất kỳ hoàn cảnh nào khi xác thực biểu mẫu không thành công.Kích hoạt sự kiện nếu có lỗi xác thực?

Tôi đã đọc this, giải thích rằng tôi cần phải thêm một handler như sau:

$('form').bind('invalid-form.validate', function() { 
    console.log('form is invalid!'); 
}); 

Nhưng sự kiện này chỉ cháy khi tôi cố gắng gửi biểu mẫu.

Tôi cần xử lý sự kiện bị BẤT K time thời gian biểu mẫu được xác thực sau (tức là yếu tố mất tiêu điểm, v.v.).

Điều tôi đang cố gắng đạt được là, tôi có hình thức lớn (~ 50 trường) và được chia nhỏ trong Bootstrap tabs.
Tôi muốn rằng khi có bất kỳ lỗi xác thực hoặc thành công mới nào, hãy đặt hoặc xóa lớp lỗi trong tiêu đề tab của tab chứa các phần tử không hợp lệ/hợp lệ. P.S. câu hỏi của tôi không phải là cách đặt các lớp đó trong các tab. Tôi chỉ muốn biết (các) sự kiện nào cần xử lý để được thông báo về mỗi thay đổi trạng thái hợp lệ trong toàn bộ biểu mẫu.

+0

Không có sự kiện nào được cung cấp bởi jQuery hoặc plugin Xác thực. Bạn sẽ phải đính kèm một 'focusout',' blur', 'keyup', vv vào mọi phần tử đầu vào và sử dụng phương thức' .valid() 'để kiểm tra biểu mẫu. – Sparky

+0

@Sparky có sự kiện như 'onvalidated' được cung cấp bởi plugin xác thực không phô trương không? – Shimmy

+0

Tôi hoàn toàn không quen thuộc với plugin 'không phô trương '. Tuy nhiên trong tất cả hàng nghìn câu hỏi jQuery Validate tôi đã thấy, tôi chưa bao giờ thấy bất kỳ sự kiện tùy chỉnh nào được mô tả. – Sparky

Trả lời

4

Tôi cần thêm người xử lý vào bất kỳ trường hợp nào xác thực biểu mẫu không thành công.

$('input, textarea, select').on('focusout keyup', function() { 
    if ($('form').valid()) { 
     // do something 
    } 
}); 

tôi muốn, rằng khi có bất kỳ xác nhận lỗi, thiết lập một lớp lỗi trong tiêu đề tab chứa các yếu tố không hợp lệ.

Vâng, đó là một chút khác biệt so với những gì bạn đã hỏi ban đầu. (Bỏ qua nửa câu trả lời đầu tiên của tôi.)

Sử dụng các tùy chọn highlightunhighlight cùng với jQuery DOM traversal để đặt và bỏ đặt bất kỳ lớp nào trong DOM bạn muốn. highlight kích hoạt khi có điều gì đó không hợp lệ và unhighlight sẽ kích hoạt khi nó hợp lệ. Xem this answer làm ví dụ.

Sử dụng the .setDefaults() method để đặt các tùy chọn này vì bạn đang sử dụng plugin unobtrusive-validation và không có quyền truy cập trực tiếp vào phương thức .validate().

+0

Tôi nghĩ rằng 'highlight' và' unhighlight' thực sự là những gì tôi đang tìm kiếm. Dù sao, tôi có thể gọi hàm 'highlight' gốc từ chức năng tô sáng mà tôi đang thiết lập không? [Ở đây] (http://pastebin.com/x5aBLz1s) 'lại chức năng ban đầu, tôi có phải sao chép và dán nó trong kịch bản ghi đè của tôi hoặc nó tồn tại ở bất cứ đâu? – Shimmy

+1

@Shimmy, bất cứ điều gì bạn đặt trong đó sẽ vượt quá mặc định. – Sparky

+1

Nói cách khác, bạn sẽ cần phải sao chép hàm mặc định vào của bạn nếu bạn muốn giữ nguyên hành vi mặc định. Sau đó được xây dựng dựa trên nó để có được hành vi mới của bạn. – Sparky

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