2012-07-13 31 views
33

chút JavaScript:jQuery Form Validation trước Ajax nộp

$(document).ready(function() 
    { 
      $('#form').submit(function(e) 
      {  

       e.preventDefault(); 
       var $form = $(this); 

       // check if the input is valid 
       if(! $form.valid()) return false; 
        $.ajax(
        { 
        type:'POST', 
        url:'add.php', 
        data:$('#form').serialize(), 
        success:function(response) 
        { 
         $("#answers").html(response); 
        } 
       });  

      }) 
    }); 

HTML bit:

<input type="text" name="answer[1]" class="required" /> 
    <input type="text" name="answer[2]" class="required" /> 

Vì vậy, đây là mã Tôi cố gắng để sử dụng. Ý tưởng là để có được tất cả các đầu vào của tôi xác nhận trước khi tôi gửi biểu mẫu của tôi với Ajax. Tôi đã thử nhiều phiên bản của điều này ngay bây giờ nhưng mỗi lần tôi kết thúc bằng việc gửi ngay cả khi biểu mẫu không được điền đầy đủ. Tất cả các yếu tố đầu vào của tôi là của lớp "bắt buộc". Ai có thể nhìn thấy những gì tôi đang làm sai?

Ngoài ra, tôi phụ thuộc vào các yêu cầu dựa trên lớp vì tên đầu vào của tôi được tạo bằng php nên tôi không bao giờ có thể chắc chắn tên [id] hoặc kiểu nhập nào tôi nhận được.

Tôi hiển thị/ẩn các câu hỏi khi tôi xem xét nó trong "trang".

<input type="button" id="next" onClick="toggleVisibility('form3')" class="next-btn"/> 

JS:

function toggleVisibility(newSection) 
     { 
      $(".section").not("#" + newSection).hide(); 
      $("#" + newSection).show(); 
     } 
+0

gì xảy ra khi bạn gửi? –

+0

Tại thời điểm này tôi chỉ cần lặp lại tất cả các cặp $ key => $ value và chúng tiếp tục xuất hiện trên màn hình của tôi ngay cả khi tôi chỉ điền vào 1/4 câu hỏi. – Tom

+0

Tôi không thể tìm thấy 'beforeSubmit' như một tùy chọn hợp lệ cho $ .ajax trong phiên bản mới nhất của jquery (v1.7.2). Bạn có thể muốn sử dụng phiên bản mới nhất của jquery. Điều đó nói rằng, câu trả lời của Darin là làm thế nào nó nên được thực hiện. Điều đó nói rằng, nếu bạn chỉ không thể làm những gì ông đang đề xuất, sau đó thay thế dòng cuối cùng của beforeSubmit của bạn với mã Fliespl đã đưa lên. Bạn cần kiểm tra giá trị trả về của '.validate()' và theo đó, hãy tiến hành hoặc hủy bỏ yêu cầu ajax. –

Trả lời

72

Bạn có thể sử dụng tùy chọn submitHandler. Về cơ bản, hãy đặt lệnh gọi $.ajax bên trong trình xử lý này, tức là đảo ngược cuộc gọi đó bằng logic thiết lập xác thực.

$('#form').validate({ 

    ... your validation rules come here, 

    submitHandler: function(form) { 
     $.ajax({ 
      url: form.action, 
      type: form.method, 
      data: $(form).serialize(), 
      success: function(response) { 
       $('#answers').html(response); 
      }    
     }); 
    } 
}); 

Plugin jQuery.validate sẽ gọi handler nộp nếu xác nhận đã qua.

+0

Nhưng tôi vẫn có thể tuần tự #answers trước khi tôi xác nhận hoặc dán nó ngay trước khi $ .ajax? – Tom

+0

Nevermind, đã xem chuỗi tuần tự trực tiếp ngay bây giờ :) – Tom

+0

'# answers' là div kết quả của bạn. Nếu bạn muốn gửi các giá trị trường đầu vào biểu mẫu cùng với yêu cầu AJAX, hãy sử dụng phương thức '.serialize()', chính xác như được hiển thị trong câu trả lời của tôi: 'data: $ (form) .serialize()' => bên trong gửi xử lý. –

6

Bạn có thể thử thực hiện:

if($("#form").validate()) { 
return true; 
} else { 
return false; 
} 
+0

Dễ dàng và hoạt động như một sự quyến rũ! : * Cảm ơn rất nhiều ^^ – Tom

+0

Ồ, tôi phải quá mệt mỏi. Vẫn không hoạt động:/ – Tom

+0

Tôi thay đổi hiển thị: không có gì trên biểu mẫu của tôi khi tôi chia nó thành nhiều "trang". Hãy nghĩ rằng có thể gây ra một số vấn đề? – Tom

3

Tôi nghĩ rằng tôi lần đầu tiên xác nhận hình thức và nếu xác nhận sẽ vượt qua, hơn tôi sẽ làm cho bài ajax. Đừng quên thêm "return false" vào cuối tập lệnh.

10

trước tiên bạn không cần phải thêm classRules một cách rõ ràng vì required được tự động phát hiện bởi plugin jquery.validate. để bạn có thể sử dụng mã này:

  1. vào mẫu gửi, bạn ngăn chặn các hành vi mặc định
  2. nếu hình thức là dừng không hợp lệ thực hiện.
  3. khác nếu hợp lệ gửi yêu cầu ajax.

    $('#form').submit( function(e){  
    
          e.preventDefault(); 
          var $form = $(this); 
    
          // check if the input is valid 
          if(! $form.valid()) return false; 
    
          $.ajax({ 
           type: 'POST', 
           url: 'add.php', 
           data: $('#form').serialize(), 
           success: function(response) { 
            $("#answers").html(response); 
           } 
    
          }); 
         }); 
    
+0

Dường như điều này không hoạt động đối với tôi:/ – Tom

+0

kiểm tra xem có lỗi trong nhật ký trình duyệt của bạn không, bạn sử dụng trình duyệt nào? – amd

+0

Tôi đang sử dụng Google Chrome, nhưng tôi không thể tìm thấy bất kỳ lỗi nào ở đó. Hãy thử lại với mã này một lần nữa. – Tom

4

ví dụ cụ thể này sẽ chỉ kiểm tra đầu vào nhưng bạn có thể tinh chỉnh nó tuy nhiên, Thêm một cái gì đó như thế này để chức năng .ajax của bạn:

beforeSend: function() {      
    $empty = $('form#yourForm').find("input").filter(function() { 
     return this.value === ""; 
    }); 
    if($empty.length) { 
     alert('You must fill out all fields in order to submit a change'); 
     return false; 
    }else{ 
     return true; 
    }; 
}, 
3

Tôi nghĩ submitHandler với validation jquery là tốt dung dịch. Hãy lấy ý tưởng từ mã này.Lấy cảm hứng từ @Darin Dimitrov

$('.calculate').validate({ 

       submitHandler: function(form) { 
        $.ajax({ 
         url: 'response.php', 
         type: 'POST', 
         data: $(form).serialize(), 
         success: function(response) { 
          $('#'+form.id+' .ht-response-data').html(response); 
         }    
        }); 
       } 
      }); 
3
> Required JS for jquery form validation 
> ## jquery-1.7.1.min.js ## 
> ## jquery.validate.min.js ## 
> ## jquery.form.js ## 

$("form#data").validate({ 
    rules: { 
     first: { 
       required: true, 
      }, 
     middle: { 
      required: true, 
     },   
     image: { 
      required: true, 
     }, 
    }, 
    messages: { 
     first: { 
       required: "Please enter first", 
      }, 
     middle: { 
      required: "Please enter middle", 
     },   
     image: { 
      required: "Please Select logo", 
     }, 
    }, 
    submitHandler: function(form) { 
     var formData = new FormData($("#image")[0]); 
     $(form).ajaxSubmit({ 
      url:"action.php", 
      type:"post", 
      success: function(data,status){ 
       alert(data); 
      } 
     }); 
    } 
}); 
+0

Câu trả lời này được giải thích khá rõ ràng cho người mới bắt đầu ... Cảm ơn! Nhưng điều này cũng xác thực tệp đính kèm !! Làm sao !! –

0

Mẫu có nguồn gốc Javascript checkValidity chức năng là nhiều hơn thì đủ để kích hoạt các HTML5 xác nhận

$(document).ready(function() { 
    $('#urlSubmit').click(function() { 
     if($('#urlForm')[0].checkValidity()) { 
      alert("form submitting"); 
     } 
    }); 
}); 
Các vấn đề liên quan