Подтвердить что ты не робот

Предотвращение отправки формы с помощью функции jQuery Validate plugin submitHandler

Я использую jQuery с плагином validate в http://docs.jquery.com/Plugins/Validation/validate

Я хочу, чтобы форма не отправлялась после процессов проверки и отправки, выполняемых через 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.

Как я могу остановить отправку кода после прохождения через ajax-коды в функции submitHandler?

4b9b3361

Ответ 1

Я делаю это так, и он работает именно так, как вы хотите, чтобы он работал:

$("#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.
    }
});

Ответ 2

$("#myform").validate({
   rules: {...},
   submitHandler: function(form, event) { 
      event.preventDefault();
      alert("Do some stuff...");
      //submit via ajax
   }
});

Надеюсь на эту помощь.

Ответ 3

Возможно, вы можете проверить внешний вид, не используя кнопку отправки:

if($("#myform").valid()){
    alert("Do some stuff...");
}

Ответ 4

Вы можете вызвать event.preventDefault() на submit событие:

$("#myform").on("submit", function(event) {
    event.preventDefault();
});

Ответ 5

Вы можете сделать это очень простым способом с помощью "jQuery Walidate". http://jquery.dop-trois.org/walidate/

Там вы можете закодировать функцию, которая будет выполнена при отправке. Посмотрите на обратный вызов в документации.

Ответ 6

к сожалению, кажется, что вызов: submitHandler: function(form){ не принимает аргумент события, поэтому кажется, что единственным решением является оператор return false, подобный этому:

...
submitHandler: function(form) {
    //your code
    return false;
},
...

Ответ 7

рабочая скрипка

в соответствии с документом проверки плагинов jquery.

submitHandler (по умолчанию: собственная форма отправки)

метод submitHandler через submitHandler приведенный ниже, процитирован из документации, он должен работать, но на самом деле он не работает, они сказали, что

Обратный вызов для обработки фактической отправки, когда форма действительна. Получает form и submit event в качестве единственных аргументов. Заменяет отправку по умолчанию. Правильное место для отправки формы через Ajax после ее проверки.

Пример: отправляет форму через Ajax, используя плагин jQuery Form, если он действителен.

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

я пишу код здесь, что работает для меня. просто вызовите свой плагин validayion, и не submitHandler в аргументы вашей функции валидации.

вместо отправки и предотвращения с помощью submitHandler используйте метод отправки submitHandler jQuery. как ниже

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

$(document).on("submit", "form", function (event) {
   event.preventDefault();
   alert("submit"); 
});

Ответ 8

Я исправил это. Патч для ошибки плагина проверки jQuery, который не был исправлен даже в v1.19.0

$('#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

    }
});