2011-01-12 4 views
0

私はページに多くのAJAXフォームを持っています。ボタンをクリックすると、それらをすべて提出する必要があります。通常の** forms.each(function(index、form){$(form).submit();}は私にとってはうまくいかないでしょう。この方法では最後のフォームのみが最終的に提出されるからです。 $ .ajax(...)ですが、フォームが有効な場合にのみ送信を有効にしたいなぜClientValidationは失敗しましたが、XmlHttpRequestが送信されるのですか?

"submitForms"で "submitTest"関数をクリックしてください jQueryドキュメントから "submitHandler"が呼び出されます。フォームが有効である。 ので、検証作品や「submitHandler」は「submitHandler」が呼び出されていないがXmlHttpRequestのは、とにかく送られ、フォームが無効な場合に呼び出されます。いないが。

どこに私のミスですかそれともありますそれ以外の方法はありますか? ありがとうございました

<% using (Ajax.BeginForm("FormPost", "Customer", null, new AjaxOptions() { HttpMethod = "POST" }, new { @class = "form-container" })) 
     { %> 

      <%: Html.TextAreaFor(m => m.Name, new { width = 440, height = 100 })%> 
      <input type="button" value="submitForms" /> 
    <% }%> 


<script type="text/javascript"> 
function submitTest(){ 
var forms = $(".form-container"); 

forms.each(function (index, form) { 
    $(form).validate({ 
     submitHandler: function (form) { 
       $.ajax(
       { 
        .... 
       }); 
     } 
    }); 
}); 

forms.each(function (index, form) { 
    $(form).submit(); 
}); 
} 
</script> 

答えて

0

EDITEDそれはのonclickとのonSubmitハンドラを設定して、それがAjax.BeginFormのための最も可能性の高い

。これはおそらく、検証ハンドラの検証ハンドラの前に最初にトリガすることになります。

UPDATE あなたがjQuery.ajax経由でフォームを送信する予定のモジュールでAjaxフォームを使用し続けたい場合は、次の操作を行うことができます。

$(function() { 
    $('.form-container').removeAttr('onsubmit').removeAttr('onclick'); 
}); 

これはAjax.BeginFormはformタグに置くハンドラを削除します。このスクリプトを他のモジュールに含めない方法が必要です。

+0

しかし、私はその前に検証を開始し、したがって$(form).submit()$(form).validate()を起動し、フォームが有効であればそれは送信されますか? – theateist

+0

@ user573082あなたは正しい、更新された答え – Vadim

+0

だから、どうすればこの問題を解決できますか?私は "<%using(Ajax.BeginForm(" FormPost "、" Customer "、null、新しいAjaxOptions(){HttpMethod =" POST "}、新しい{@class ="フォームコンテナ "})))と"バリデーションを使用することもできます。私はそれをどうやって? – theateist

関連する問題