Проверка формы jQuery перед отправкой Ajax

бит JavaScript:

$(document).ready(function()
    {
            $('#form').submit(function(e)
            {     

                e.preventDefault();
                var $form = $(this);

                // check if the input is valid
                if(! $form.valid()) return false;
                    $.ajax(
                    {
                    type:'POST',
                    url:'add.php',
                    data:$('#form').serialize(),
                    success:function(response)
                    {
                        $("#answers").html(response);
                    }
                });     

            })
    });

бит HTML:

    <input type="text" name="answer[1]" class="required" />
    <input type="text" name="answer[2]" class="required" />

Итак, это код, который я пытаюсь использовать. Идея состоит в том, чтобы проверить все мои входы до того, как я отправлю свою форму с помощью Ajax. Я пробовал множество версий этого сейчас, но каждый раз, когда я заканчиваю отправкой, даже если форма не полностью заполнена. Все мои входы имеют "необходимый" класс. Может ли кто-нибудь увидеть, что я делаю неправильно?

Кроме того, я полагаюсь на требования к классам, так как мои имена ввода генерируются с помощью php, поэтому я никогда не могу быть уверенным, какое имя [id] или типы ввода я получаю.

Я показываю/скрываю вопросы, когда я просматриваю их на "страницах".

<input type="button" id="next" onClick="toggleVisibility('form3')" class="next-btn"/>

JS:

function toggleVisibility(newSection) 
        {
            $(".section").not("#" + newSection).hide();
            $("#" + newSection).show();
        } 

Ответ 1

Вы можете использовать параметр submitHandler. По существу, вызов $.ajax внутри этого обработчика, т.е. Инвертирует его с помощью логики настройки проверки.

$('#form').validate({

    ... your validation rules come here,

    submitHandler: function(form) {
        $.ajax({
            url: form.action,
            type: form.method,
            data: $(form).serialize(),
            success: function(response) {
                $('#answers').html(response);
            }            
        });
    }
});

Плагин jQuery.validate будет вызывать обработчик отправки, если проверка прошла.

Ответ 2

сначала вам не нужно явно добавлять classRules, так как required автоматически определяется плагином jquery.validate. поэтому вы можете использовать этот код:

  • в форме submit, вы предотвращаете поведение по умолчанию
  • Если форма недействительна, прекратите выполнение.
  • else, если действительный отправляет запрос ajax.

    $('#form').submit(    function(e){     
    
                e.preventDefault();
                var $form = $(this);
    
              // check if the input is valid
                if(! $form.valid()) return false;
    
               $.ajax({
                    type: 'POST',
                    url: 'add.php',
                    data: $('#form').serialize(),
                    success: function(response) {
                        $("#answers").html(response);
                    }
    
                });
            });
    

Ответ 3

Вы можете попробовать:

if($("#form").validate()) {
 return true;
} else {
 return false;
}

Ответ 4

Этот конкретный пример будет просто проверять входные данные, но вы можете его настроить, однако добавьте что-то подобное к вашей функции .ajax:

beforeSend: function() {                    
    $empty = $('form#yourForm').find("input").filter(function() {
        return this.value === "";
    });
    if($empty.length) {
        alert('You must fill out all fields in order to submit a change');
        return false;
    }else{
        return true;
    };
},

Ответ 5

Я думаю, что сначала проверяю форму, и если будет проходить валидация, я бы сделал сообщение ajax. Не забудьте добавить "return false" в конце script.

Ответ 6

Я думаю, что submitHandler с проверкой jquery является хорошим решением. Пожалуйста, получите представление об этом коде. Вдохновленный от @Darin Dimitrov

$('.calculate').validate({

                submitHandler: function(form) {
                    $.ajax({
                        url: 'response.php',
                        type: 'POST',
                        data: $(form).serialize(),
                        success: function(response) {
                            $('#'+form.id+' .ht-response-data').html(response);
                        }            
                    });
                }
            });

Ответ 7

> Required JS for jquery form validation
> ## jquery-1.7.1.min.js ##
> ## jquery.validate.min.js ##
> ## jquery.form.js ##

$("form#data").validate({
    rules: {
        first: {
                required: true,
            },
        middle: {
            required: true,
        },          
        image: {
            required: true,
        },
    },
    messages: {
        first: {
                required: "Please enter first",
            },
        middle: {
            required: "Please enter middle",
        },          
        image: {
            required: "Please Select logo",
        },
    },
    submitHandler: function(form) {
        var formData = new FormData($("#image")[0]);
        $(form).ajaxSubmit({
            url:"action.php",
            type:"post",
            success: function(data,status){
              alert(data);
            }
        });
    }
});

Ответ 8

Формировать встроенную функцию JavaScript checkValidity более чем достаточно для запуска проверки HTML5

$(document).ready(function() {
    $('#urlSubmit').click(function() {
        if($('#urlForm')[0].checkValidity()) {
            alert("form submitting");
        }
    });
});