2008-12-12 29 views
37

Tôi đang sử dụng plugin xác thực jQuery để xác thực biểu mẫu và tôi muốn xóa xác thực và gửi biểu mẫu nếu một liên kết nhất định được nhấp.Làm cách nào để xóa xác thực jQuery khỏi biểu mẫu?

Tôi đang gửi biểu mẫu có javascript như jQuery('form#listing').submit(), vì vậy tôi phải xóa các quy tắc/chức năng xác thực bằng javascript.

Vấn đề là tôi không thể tìm ra cách thực hiện việc này. Tôi đã thử những thứ như jQuery('form#listing').validate({});jQuery('form#listing').validate = null, nhưng không có may mắn.

Trả lời

66

Kích hoạt DOM nộp phương pháp để bỏ qua xác nhận:

$("#listing")[0].submit(); 
+0

wow, đó là không thể tin được hữu ích và đơn giản. cảm ơn! –

+0

Đó là một mẹo hay. Cảm ơn. – kolrie

+7

Thật vậy, đó là một mẹo tuyệt vời, nhưng nó không trả lời câu hỏi. – biphobe

7

Bạn có thể thêm một lớp css của hủy một phần tử (nút, đầu vào) để nó bỏ qua xác nhận

+0

Tôi nộp mẫu đơn với javascript, vì vậy không may rằng sẽ không làm việc. – Ben

+0

May mắn thay, tôi không làm gì phức tạp, vì vậy điều này làm việc cho tôi. Cảm ơn. – uriDium

+0

cũng có thể được sử dụng thuộc tính html5 formnovalidate trên phần tử gửi – Luiz

34

Bạn có thể loại bỏ các sự kiện của các nút với unbind:

jQuery('form#listing').unbind('submit'); // remove all submit handlers of the form 

bạn là gì lẽ tìm kiếm là plugin xác thực cũng có thể bỏ gán chính nó khỏi sự kiện gửi:

jQuery('form#listing').validate({ 
    onsubmit : false 
}); 

Đối với cả hai bạn có thể theo dõi một cuộc gọi đến .submit() gửi biểu mẫu:

jQuery('form#listing').unbind('submit').submit(); 
+3

Chỉ có phương pháp unbind làm việc cho tôi. Sử dụng jQuery 1.3.2 và Validate 1.5.5 – JavadocMD

+0

cho tôi nữa, chỉ bị chặn unbind làm việc –

2

Gần đây tôi đã nâng cấp lên 1.5.5 của kịch bản validator Jörn và chức năng removeValidator đã không được chấp nhận.


... 
jQuery.extend(
      jQuery.fn, 
      { 
      removeValidator: function(){ 
       this.unbind(); 
       jQuery.removeData(this[0], 'validator'); 
      } 
... 
5

Điều này dường như làm việc cho tôi ngay bây giờ:

var form = $('#my_form_id').get(0); 
$(form).removeData('validate'); 
+0

meh. Bây giờ tôi đang sử dụng phương pháp được đề cập bởi Jorn ở trên. Tôi có thể sử dụng điều này khi tôi muốn bỏ qua xác thực:

 \t bypassValidator = function(){ \t \t $("#btn-submit").bind('click', function(){ \t \t \t $('#myForm')[0].submit(); \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t }); \t } 
kenitech

+1

cách tiếp cận của bạn ở đây đã giải quyết được một vấn đề hơi khác đối với tôi. Tôi đang tải động trong các biểu mẫu khác nhau thông qua Ajax và nếu tên trường giống với xác thực hiện có sẽ áp dụng cho nó trừ khi tôi lần đầu tiên chạy mã ở trên. – Damo

19
var form = $('#my_form_id').get(0); 
$.removeData(form,'validator'); 

là thực sự làm việc.

+8

Sau khi hacking xung quanh về điều này, trên cần phải $ (hình thức) .removeData ('validator'); – BishopZ

+0

làm việc tốt cho tôi. :) –

+0

Sau lệnh này, tôi gọi lại $ ("form"). Validate (GetSettings()); GetSettings bên trong Tôi chỉ trả về {..., groups: GetValidationGroups(), ...} cho phép tôi tự động thay đổi các nhóm xác nhận. –

6

Bạn cũng có thể sử dụng "quy tắc" public function theo cách này:

$('input, select, textarea').each(function() { 
    $(this).rules('remove'); 
}); 

Đó là những gì tôi đang sử dụng;)

+0

Điều này làm việc khá tốt cho tôi. Tôi cần phải xóa các quy tắc đã được áp dụng và sau đó áp dụng một tập con nhỏ hơn của các quy tắc. Trong trường hợp của tôi, tôi có một nút Gửi (thực thi nhiều trường bắt buộc) và nút Lưu (chỉ thực thi định dạng dữ liệu). Sau khi gửi, tôi nhận được tất cả các loại lỗi xác thực trường bắt buộc, sau đó tôi có thể thực hiện lưu nếu không có lỗi định dạng dữ liệu. nếu có một số lỗi xác thực trên lưu nó, thật không may, hiển thị các lỗi xác nhận trường bắt buộc quá, nhưng điều này là đủ gần đối với tôi. Tôi đã thử một số ví dụ khác ở đây để loại bỏ điều đó mà không có may mắn. –

+0

Yup. Tôi đã ở trong cùng một kịch bản như @KirkLiemohn: Nhiều nút gửi với mã phía máy chủ cần biết đã được nhấn. Gọi '.submit()' để gửi biểu mẫu sẽ xóa sạch dữ liệu đó, và cách của bạn là người duy nhất làm việc cho tôi! Cảm ơn! – anon

+1

Hãy xem tài liệu về điều này: https://jqueryvalidation.org/rules –

6

tôi đã tìm thấy không ai trong số những cách khác hữu ích nếu bạn muốn bật/tắt xác thực biểu mẫu của bạn (ví dụ: xác thực khác nhau cho các loại thanh toán ...)

Những gì tôi đã làm (đây không phải là một sửa chữa đẹp, nhưng nó không làm việc)

Thiết lập xác nhận của bạn:

jQuery('#form').validate(); 

Vô hiệu hóa các hình thức:

jQuery('#form').validate().currentForm = ''; 

Bật lại biểu mẫu:

jQuery('#form').validate().currentForm = jQuery('#form')[0]; 
+0

cảm ơn, điều này đã giúp tôi ngày hôm nay. Tôi đã có một hình thức mà tôi đã được gửi với ajax * và sau đó thanh toán bù trừ tất cả các yếu tố đầu vào * để nó có thể được sử dụng lại - điều này kích hoạt trình xác nhận để gửi thông báo lỗi như thể người dùng đã xóa tất cả thông tin cần thiết. Tôi sử dụng này trên nộp trước khi xóa biểu mẫu để tránh gửi thư rác cho người dùng với thông báo 'trường này là bắt buộc' :) – jammypeach

+0

'jQuery ('# form'). Validate(). CurrentForm = '';' hoạt động độc đáo. –

+0

Làm việc sau khi thử 6 giải pháp khác.Tại sao JQ Validate lại không thể đoán trước được? –

1

Đối với tất cả các thẻ, đầu vào của biểu mẫu:

$('#myform').validate().settings.ignore = '.valid'; 
$('input').addClass('valid'); 

Nó làm việc cho tôi.

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