2013-07-24 45 views
5

Tôi đang sử dụng jQuery xác thực biểu mẫu, nhưng khi biểu mẫu được xác thực, nó tải lại hoặc gửi trang tôi muốn dừng hành động đó. Tôi đã sử dụng event.preventDefault(), nhưng nó không hoạt động.jQuery Xác thực biểu mẫu dừng gửi

Đây là mã của tôi:

$("#step1form").validate(); 
$("#step1form").on("submit", function(e){ 
    var isValid = $("#step1form").valid(); 

    if(isValid){ 
     e.preventDefault(); 
     // Things i would like to do after validation 
     $(".first_step_form").fadeOut(); 
     if(counter == 3){ 
      $(".second_step_summary").fadeIn(); 
      $(".third_step_form").fadeIn(); 
      $(".third_inactive").fadeOut(); 
     }else if(counter < 3){ 
      $(".second_step_form").fadeIn(); 
      $(".third_inactive").fadeIn(); 
     } 

     $(".first_step_summary").fadeIn(); 
     $(".second_inactive").fadeOut(); 
    } 

    return false; 
}); 
+1

Bạn đã có 'e.preventDefault() 'tại địa điểm sai. Nó nằm trong câu lệnh 'if' chỉ chạy khi biểu mẫu hợp lệ. – Archer

+0

không hoạt động anyway – monk

+0

Điều đó sẽ xảy ra nếu biểu mẫu hợp lệ, nhưng nó ở sai vị trí bất kể. – Archer

Trả lời

8

submitHandler là chức năng gọi lại được tích hợp vào plugin.

submitHandler (mặc định: hình thức bản địa nộp):

Callback để xử lý thực tế nộp khi biểu mẫu là hợp lệ. Nhận được biểu mẫu làm đối số duy nhất. Thay thế gửi mặc định. Phải địa điểm để gửi biểu mẫu qua Ajax sau khi được xác thực.

Kể từ khi submitHandler tự động nắm bắt được click vào nút gửi và chỉ cháy trên một hình thức hợp lệ, bạn không cần một trình xử lý, cũng không làm bạn cần phải sử dụng valid() để kiểm tra mẫu.

Bạn mã có thể được thay thế bằng:

$("#step1form").validate({ 
    submitHandler: function(form) { 
     // Things I would like to do after validation 
     $(".first_step_form").fadeOut(); 
     if(counter == 3){ 
      $(".second_step_summary").fadeIn(); 
      $(".third_step_form").fadeIn(); 
      $(".third_inactive").fadeOut(); 
     }else if(counter < 3){ 
      $(".second_step_form").fadeIn(); 
      $(".third_inactive").fadeIn(); 
     } 
     $(".first_step_summary").fadeIn(); 
     $(".second_inactive").fadeOut(); 
     return false; // block the default submit action 
    } 
}); 
+0

nơi để chỉ định url tác vụ để gửi? –

+0

@coding_idiot, vì anh ta muốn sử dụng 'preventDefault()', nó giả định OP đang thực hiện một trình Ajax bên trong 'submitHandler'. Không có hàm 'submitHandler',' action' mặc định trên phần tử '

' sẽ kích hoạt. – Sparky

+0

cảm ơn, nó hoạt động. Nhưng thật không may, tôi có các trường nhập với 'dấu chấm' trong tên. Vui lòng xem câu hỏi của tôi tại đây - http://stackoverflow.com/questions/20219923/how-to-validate-input-fields-with-a-dot-in-name-using-the-jquery-validation-plug/20220457? noredirect = 1 # 20220457 –

3

tôi sử dụng cấu trúc cơ bản này cho tất cả các xác nhận JS của tôi, mà làm những gì bạn hỏi

$('#form').on('submit', function() { 
    // check validation 
    if (some_value != "valid") { 
     return false; 
    } 
}); 

Bạn không cần e.preventDefault(); và một tuyên bố return false;, họ làm điều tương tự.

+1

Không chính xác. 'return false' trong trình xử lý sự kiện jQuery =' e.preventDefault() 'và' e.stopPropagation() ' –

+0

Điều này tốt cho những người không sử dụng tính năng xác thực hợp lệ –

0

Plugin cung cấp gọi lại cho các lần gửi biểu mẫu hợp lệ và không hợp lệ. Nếu bạn cung cấp gọi lại submitHandler thì biểu mẫu sẽ không tự động được gửi đến máy chủ.

$("#step1form").validate({ 
    submitHandler : function() 
    { 
     // the form is valid 
     $(".first_step_form").fadeOut(); 
     if(counter == 3){ 
      $(".second_step_summary").fadeIn(); 
      // etc 
     } 
    } 
}); 
Các vấn đề liên quan