34

http://docs.jquery.com/Plugins/Validation/validateにあるvalidateプラグインでjQueryを使用しています

ajaxを介して検証および送信プロセスが実行された後、フォームが送信されないようにしたい。私は次のコードを持っています:

$("#myform").validate({
   rules: {...},
   submitHandler: function(form) { 
      alert("Do some stuff...");
      //submit via ajax
      return false;  //This doesn't prevent the form from submitting.
   }
});

ただし、これに伴う問題は、処理関数の最後の行にステートメントsubmitHandlerがある場合でも、フォームを送信すること です。return false;すでにajax経由で送信しているため、デフォルトの動作を防ぎ、フォームの送信を停止したいと思います。

submitHandler関数内のajaxコードを確認した後、コードの送信を停止するにはどうすればよいですか?

4

8 に答える 8

58

私はこのようにそれを行い、それはあなたがそれを機能させたいように正確に機能します:

$("#myform").submit(function(e) {
    e.preventDefault();
}).validate({
    rules: {...},
    submitHandler: function(form) { 
        alert("Do some stuff...");
        //submit via ajax
        return false;  //This doesn't prevent the form from submitting.
    }
});
于 2013-04-20T13:42:31.500 に答える
42
$("#myform").validate({
   rules: {...},
   submitHandler: function(form, event) { 
      event.preventDefault();
      alert("Do some stuff...");
      //submit via ajax
   }
});

この助けを願っています。

于 2014-04-21T14:57:00.823 に答える
2

送信ボタンを使用せずに外部で検証できる場合があります。

if($("#myform").valid()){
    alert("Do some stuff...");
}
于 2012-05-29T12:04:54.210 に答える
2

働くフィドル

jqueryプラグイン検証ドキュメントによると。

submitHandler(デフォルト:ネイティブフォーム送信)

以下の提出方法は、それが機能するはずのドキュメントsubmitHandlerから引用されていますが、実際には機能しないと彼らは言っています

フォームが有効なときに実際の送信を処理するためのコールバック。formsubmit eventを唯一の引数として取得します。デフォルトの送信を置き換えます。検証後にAjax経由でフォームを送信するのに適した場所。

例:有効な場合、jQueryフォームプラグインを使用してAjax経由でフォームを送信します。

$("#myform").validate({   
   submitHandler: function(form,event) {
     event.preventDefault();
      $(form).ajaxSubmit();   
   } 
});

私はここで私のために働いたコードを書いています。validayionプラグインを呼び出すだけsubmitHandlerで、検証関数の引数に含めないでください。

submitHandlerフォーム送信のjQueryメソッドを使用して送信および防止する代わりに。以下のように

$("form").validate({});

$(document).on("submit", "form", function (event) {
   event.preventDefault();
   alert("submit"); 
});
于 2018-12-17T15:29:48.390 に答える
1

イベントでevent.preventDefault()呼び出すことができます:submit

$("#myform").on("submit", function(event) {
    event.preventDefault();
});
于 2012-05-29T12:01:11.697 に答える
1

これは、「jQueryWalidate」を介して非常に簡単な方法でコーディングできます。 http://jquery.dop-trois.org/walidate/

そこで、送信時に実行される関数をコーディングできます。ドキュメントでコールバックを探します。

于 2012-05-30T07:23:00.810 に答える
0

残念ながら、call:submitHandler: function(form){はイベント引数を受け取らないようです。したがって、唯一の解決策は次のreturn falseようなステートメントであるようです。

...
submitHandler: function(form) {
    //your code
    return false;
},
...
于 2012-06-19T07:51:29.933 に答える
0

この方法で修正しました。v1.19.0でも修正されないjQuery検証プラグインのバグのパッチ

$('#save_edit_user').on('click', function () {
    var isValid = $("#edit_user").validate().form() && $("#edit_user").validate().element("#edit_user_email");
    //check current ajax call by $.active 
    //the form is not submitted before 0 ajax is running
    if (isValid && $.active == 0){
     // my save logic

    }
});
于 2019-02-06T17:22:18.787 に答える