jQuery validate: вызов функции после проверки формы

Я пытаюсь вызвать функцию, которая сохранит мою форму.

Вот мой код:

$('#save-form-datas').validate({
    rules: {
        ROO_Number: {
            required: true,
            minlength: 1,
            maxlength: 4
        }
    },
    submitHandler: function(form) {
        var formData = new FormData(form);
        saveFormDatas(form);
    }
});

Но когда код выполняется, он не работает.

Вот код функции, которую я хочу выполнить сразу после проверки for:

function saveFormDatas(form) {

    $.ajax({
        type : 'POST',
        data : form.serialize(),
        url  : 'assets/app/php/ajax/rooms_edit.php',
        success: function(responseText){
            var json = $.parseJSON(responseText);
            if(json.type=="success") {
                $('#status-message-saved.hide').removeClass('hide');

                if(json.return_url!="") { 
                    setTimeout(function(){ window.location.href = "app?q=" + json.return_url; }, 1000);
                }
            }
            if(json.type=="error") {
                $('#status-message-error.hide').removeClass('hide');
            }
        }
    });
}

Но это не работает, и просто откройте новую страницу, как это, я передал форму с $_GET (все мои данные формы находятся в URL).

Мне нужно сделать так, потому что у меня есть более 100 форм и я не могу дублировать мой код для сохранения форм.

Спасибо за вашу помощь.

3 ответа

Решение

Просто удалите submitHandler из валидатора и добавьте внешнюю функцию.

$('#save-form-datas').validate({
 rules: {
    ROO_Number: {
        required: true,
        minlength: 1,
        maxlength: 4
    }
 }
});

Обработайте форму, как показано ниже.

$('#save-form-datas').submit(function(event){
    event.preventDefault();
    if($('#save-form-datas').valid()){
        var form = $('#save-form-datas')[0];
        var formData = new FormData(form);
        saveFormDatas(form);
    }
});

Или же вы можете просто добавить "return false", как показано ниже...(Это предотвратит отправку формы по умолчанию)

$('#save-form-datas').validate({
 rules: {
    ROO_Number: {
        required: true,
        minlength: 1,
        maxlength: 4
    }
 },
 submitHandler: function(form) {
    var formData = new FormData(form);
    saveFormDatas(form);
    return false;
 }
});

Я сделал с этим в моем коде

$('#save-form-datas').validate({
    rules: {
        ROO_Number: {
            required: true,
            minlength: 1,
            maxlength: 4
        }
    }
});

здесь вы можете проверить, если форма действительна или нет

if($('#save-form-datas').valid()){
      function myfunction()
}

myfunction {

$.ajax({
        type : 'POST',
        data : $('#save-form-datas').serialize(),
        url  : 'assets/app/php/ajax/rooms_edit.php',
        success: function(responseText){
            var json = $.parseJSON(responseText);
            if(json.type=="success") {
                $('#status-message-saved.hide').removeClass('hide');

                if(json.return_url!="") { 
                    setTimeout(function(){ window.location.href = "app?q=" + json.return_url; }, 1000);
                }
            }
            if(json.type=="error") {
                $('#status-message-error.hide').removeClass('hide');
            }
        }
    });
}

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

jQuery Validate предоставляет параметр option под названием showErrors , который получает карту и список ошибок. Все, что вам нужно сделать, это привязать туда:

      $("#myform").validate({
  showErrors: function(map,errors) {
    var validator = this;
    onValidate(validator);
    return validator.defaultShowErrors(map,errors);
  }
});

function onValidate(validator) {
  var isValid = validator.valid();
  // do something ...
}

Кроме того, вы можете принудительно выполнить проверку один раз, когда загружается Javascript, для инициализации, кнопок и прочего: $("#myform").data('validator').form();

Другие вопросы по тегам