2008-09-26 30 views
16

Tôi đang sử dụng plugin biểu mẫu JQuery (http://malsup.com/jquery/form/) để xử lý việc gửi biểu mẫu ajax. Tôi cũng có JQuery.Validate (http://docs.jquery.com/Plugins/Validation) được cắm để xác thực phía khách hàng của tôi.Plugin JQuery.Validate có thể ngăn chặn việc gửi biểu mẫu Ajax

Những gì tôi thấy là xác thực không thành công khi tôi mong đợi nó tuy nhiên nó không ngăn chặn biểu mẫu gửi. Khi tôi đã sử dụng một hình thức truyền thống (tức là không ajax) việc xác nhận không ngăn chặn các hình thức để gửi ở tất cả .... đó là hành vi mong muốn của tôi.

Tôi biết rằng xác thực được nối chính xác vì các thông báo xác thực vẫn xuất hiện sau khi gửi ajax đã xảy ra.

Vì vậy, những gì tôi đang thiếu đang ngăn chặn hành vi mong muốn của tôi? Mẫu mã dưới đây ....

<form id="searchForm" method="post" action="/User/GetDetails"> 
     <input id="username" name="username" type="text" value="user.name" /> 
     <input id="submit" name="submit" type="submit" value="Search" /> 
</form> 
<div id="detailsView"> 
</div> 

<script type="text/javascript"> 
    var options = { 
     target: '#detailsView' 
    }; 
    $('#searchForm').ajaxForm(options); 

    $('#searchForm').validate({ 
    rules: { 
    username: {required:true}}, 
    messages: { 
    username: {required:"Username is a required field."}} 
    }); 
</script> 
+0

Berko - Bất kỳ cơ hội nào bạn có thể chọn câu trả lời chính xác hoặc cho chúng tôi biết nếu nó không giải quyết được sự cố của bạn? –

+0

Tôi đã thêm câu trả lời dưới đây. Có thể hoặc không thể giúp bạn. – berko

Trả lời

1

Cũng giống như một đường chuyền đầu tiên, tôi tự hỏi tại sao dòng

$("form").validate({ 

không đề cập đến $ ("searchform"). Tôi đã không xem xét điều này, hoặc đã thử nó, nhưng điều đó dường như không phù hợp. Bạn sẽ không muốn gọi xác thực trên biểu mẫu thích hợp?

Dù sao, nếu điều này là hoàn toàn sai, thì lỗi không rõ ràng ngay lập tức. :)

+0

Đó là sự giám sát khi tôi đăng. Nhưng thậm chí sau đó nó không tạo ra sự khác biệt vì đó là hình thức duy nhất trên trang - vì vậy $ ('# searchform') về cơ bản tương đương với $ ('form'). – berko

0

Có thể là trả về false; trên biểu mẫu sẽ trợ giúp? :) Ý tôi là:

<form id="searchForm" method="post" action="/User/GetDetails" onSubmit="return false;"> 
15

Bạn cần phải thêm một chức năng gọi lại để sử dụng với sự kiện beforeSubmit khi khởi tạo ajaxForm():

var options = { 
     beforeSubmit: function() { 
      return $('#searchForm').validate().form(); 
     }, 
     target: '#detailsView' 
    }; 

Bây giờ nó biết để kiểm tra kết quả của xác nhận trước khi nó sẽ gửi trang.

+0

Rất tiếc, tôi không biết câu hỏi này đã được 7 tháng tuổi ... Oh well! –

+3

+1, Câu trả lời hay. Nó thực sự đã giúp tôi. Tôi không sử dụng plugin biểu mẫu, nhưng, chỉ để những người khác biết, bạn có thể làm điều tương tự nếu bạn đang ràng buộc biểu mẫu của mình bằng ajax theo cách thủ công bằng phương thức $ .ajax ({...}). Sự khác biệt duy nhất là thay vì 'beforeSubmit' là 'beforeSend'. Một lần nữa cám ơn. – KyleFarris

+0

Câu trả lời hay! Cảm ơn, Lance! – ffffff01

1

Cũng đảm bảo tất cả các trường nhập của bạn có thuộc tính "tên" cũng như thuộc tính "id". Tôi nhận thấy plugin xác thực jquery không hoạt động chính xác nếu không có các plugin này.

4

... cũng đã lâu rồi nên tình hình của tôi đã thay đổi một chút. Hiện tại tôi có một tùy chọn submitHandler được chuyển tới plugin Validate(). Trong trình xử lý đó, tôi sử dụng ajaxSubmit theo cách thủ công. Thêm một cách giải quyết hơn là một câu trả lời tôi đoán. Hy vọng rằng sẽ giúp.

http://jquery.bassistance.de/validate/demo/ajaxSubmit-intergration-demo.html

var v = jQuery("#form").validate({ 
    submitHandler: function(form) { 
     jQuery(form).ajaxSubmit({target: "#result"}); 
    } 
}); 
1

ok, đây là một câu hỏi cũ nhưng tôi sẽ đưa giải pháp của chúng tôi ở đây cho hậu thế. i cá nhân phân loại này như là một hack-trocity, nhưng ít nhất nó không phải là một hack-Tà Cú-manjaro

<script type="text/javascript"> 
    var options = { 
     target: '#detailsView' 
    }; 

// -- "solution" -- 
$('#searchForm').submit(function(event) { 
    this.preventDefault(event); // our env actually monkey patches preventDefault 
           // impl your own prevent default here 
           // basically the idea is to bind a prevent default 
           // stopper on the form's submit event 
}); 
// -- end -- 

    $('#searchForm').ajaxForm(options); 

    $('#searchForm').validate({ 
     rules: { 
     username: {required:true}}, 
     messages: { 
     username: {required:"Username is a required field."}} 
    }); 
</script> 
+0

Wohoo bỏ phiếu cho anh chàng này, this.preventDefault (sự kiện); hoạt động như một sự quyến rũ !! –

2
$('#contactform').ajaxForm({ 
    success : FormSendResponse, 
    beforeSubmit: function(){ 
    return $("#contactform").valid(); 
    } 
}); 


$("#contactform").validate(); 

Trên đang làm việc tốt cho tôi.

+0

Một lần nữa, tôi biết đây là một câu hỏi cũ, nhưng tôi nghĩ đây là câu trả lời hay nhất. Một câu trả lời đơn giản và gọn gàng. –

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