it-swarm.com.ru

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

Я использую jQuery с плагином проверки в 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?

29
Carven

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

$("#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.
    }
});
48
Zoltan
$("#myform").validate({
   rules: {...},
   submitHandler: function(form, event) { 
      event.preventDefault();
      alert("Do some stuff...");
      //submit via ajax
   }
});

Надеюсь, это поможет.

28
pockiiie

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

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

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

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

1
Gregory

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

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

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

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

работает скрипка

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

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

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

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

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

$("#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"); 
});
0
Waqar Hussain

Я исправил это. Патч для ошибки плагина jQuery Validation, который не исправлен даже на 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

    }
});
0
Adrian P.