在Ajax提交之前进行jQuery表单验证

Tom*_*Tom 41 validation ajax jquery jquery-validate

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);
                    }
                });     

            })
    });
Run Code Online (Sandbox Code Playgroud)

HTML位:

    <input type="text" name="answer[1]" class="required" />
    <input type="text" name="answer[2]" class="required" />
Run Code Online (Sandbox Code Playgroud)

所以这是我试图使用的代码.我的想法是在我用Ajax发送表单之前验证我的所有输入.我现在已经尝试了很多版本,但每次我最终都提交,即使表格没有完全填写.我的所有输入都是"必需"类.谁能看到我做错了什么?

此外,我依赖基于类的要求,因为我的输入名称是用PHP生成的,所以我永远无法确定我得到的名称[id]或输入类型.

当我在"页面"中浏览时,我会显示/隐藏问题.

<input type="button" id="next" onClick="toggleVisibility('form3')" class="next-btn"/>
Run Code Online (Sandbox Code Playgroud)

JS:

function toggleVisibility(newSection) 
        {
            $(".section").not("#" + newSection).hide();
            $("#" + newSection).show();
        } 
Run Code Online (Sandbox Code Playgroud)

Dar*_*rov 93

你可以使用这个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);
            }            
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

jQuery.validate如果验证已通过,插件将调用提交处理程序.


amd*_*amd 13

首先,您不需要classRules显式添加,因为requiredjquery.validate插件会自动检测到.所以你可以使用这段代码:

  1. 在表单提交上,您可以防止默认行为
  2. 如果表单无效则停止执行.
  3. 否则,如果有效则发送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);
                    }
    
                });
            });
    
    Run Code Online (Sandbox Code Playgroud)


小智 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);
            }
        });
    }
});
Run Code Online (Sandbox Code Playgroud)


Ark*_*ski 6

你可以试试:

if($("#form").validate()) {
 return true;
} else {
 return false;
}
Run Code Online (Sandbox Code Playgroud)


Eri*_*rth 5

这个具体的例子只是检查输入,但是你可以调整它,然后在你的.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;
    };
},
Run Code Online (Sandbox Code Playgroud)