Ajax 提交之前的 jQuery 表单验证

问题描述 投票:0回答:13

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();
        } 
jquery ajax jquery-validate validation
13个回答
116
投票

您可以使用

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
插件将调用提交处理程序。


21
投票

首先,您不需要显式添加

classRules
,因为 jquery.validate 插件会自动检测到
required
。 所以你可以使用这个代码:

  1. 在表单提交时,您可以防止默认行为
  2. 如果表单无效,则停止执行。
  3. 否则如果有效则发送ajax请求。
$('#form').submit(function (e) {
  e.preventDefault();
  var $form = $(this);

  // check if the input is valid using a 'valid' property
  if (!$form.valid) return false;

  $.ajax({
    type: 'POST',
    url: 'add.php',
    data: $('#form').serialize(),
    success: function (response) {
      $('#answers').html(response);
    },
  });
});

7
投票

你可以尝试这样做:

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

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

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

4
投票

我认为带有jquery验证的submitHandler是一个很好的解决方案。请从这段代码中得到想法。灵感来自@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);
                        }            
                    });
                }
            });

3
投票

我认为我首先验证表单,如果验证通过,那么我会进行ajax发布。不要忘记在脚本末尾添加“return false”。


0
投票
function validateForm()
{
    var a=document.forms["Form"]["firstname"].value;
    var b=document.forms["Form"]["midname"].value;
    var c=document.forms["Form"]["lastname"].value;
    var d=document.forms["Form"]["tribe"].value;
    if (a==null || a=="",b==null || b=="",c==null || c=="",d==null || d=="")
    {
        alert("Please Fill All Required Field");
        return false;
    }
    else{

        $.ajax({
        type: 'post',
        url: 'add.php',
        data: $('form').serialize(),
        success: function () {
          alert('Patient added');
          document.getElementById("form").reset();
        }
      });

    }
}

  $(function () {

    $('form').on('submit', function (e) {
      e.preventDefault();

      validateForm();


    });
  });

0
投票

在检查表单是否有效之前,您需要触发表单验证。在每个字段中输入数据后,字段验证将运行。表单验证由提交事件触发,但在文档级别。因此,您的事件处理程序在 jquery 验证整个表单之前被触发。但不用担心,有一个简单的解决方案可以解决所有这些问题。

您应该验证表格:

if ($(this).validate().form()) {
  // do ajax stuff
}

https://jqueryvalidation.org/Validator.form/#validator-form()


0
投票
$("#myformId").submit(function (event) {
    // submit modal form of create & edit 
    event.preventDefault();
    formObj = $(this);
        
    // check the form input is valid or not if not valid then return false;
    if (!formObj.validate().form()) return false;

    data = $(formObj).serializeArray();

    // do stuff with ajax or anything else what you wants 
});

说明:- 首先验证表单,如果验证通过,则调用 ajax 请求,否则使用 return false 停止执行;

var validator = $( "#myform" ).validate();
验证表单,如果有效则返回 true,否则返回 false。所以,我们只需要检查
if (!formObj.validate().form())

了解更多详细信息请参阅此处文档

我分享验证功能的自定义选项

$(function () {
    $('form.needs-validation').each(function() {   // <- selects every <form> on page which contains .needs-validation class
        var validator = $(this).validate({
            errorElement: 'span',
            errorPlacement: function (error, element) {
                error.addClass('invalid-feedback');
                element.closest('.form-group').append(error);
            },
            highlight: function (element, errorClass, validClass) {
                $(element).addClass('is-invalid');
            },
            unhighlight: function (element, errorClass, validClass) {
                $(element).removeClass('is-invalid');
            }
        });
    });
});

有关自定义 JQuery 验证的更多详细信息请参阅此处

有关自定义默认验证消息,请参阅下面的答案 URL,这对我非常有帮助

  1. 更改默认错误消息
  2. 如何在 JQuery Validate 错误消息中包含字段标签

0
投票

HTML 表单:

<div class="w3-padding w3-flat-clouds">
         <p><label>Your Name:</label><input id = 'name' class="w3-input w3-border" type="text" name = 'enter-name' placeholder = "Enter your Name" required></p>
         <p><label>Your Email:</label><input id = 'e-mail' class="w3-input w3-border" type="text" name = 'enter-email' placeholder = "Enter your email" required></p>
         <p><label>Your Message:</label><textarea id = 'message' style = 'height: 80px;' class="w3-input w3-border" name = 'enter-message' placeholder = "Enter your message..." required></textarea></p>
         <button class = 'w3-button w3-btn w3-black w3-hover-green' id = 'sub-btn'>submit</button>
      </div>

阿贾克斯:

   $(document).ready(() => {
        $('#sub-btn').click(() => {
            var nameInsert = document.getElementById('name').value;
            var emailInsert = document.getElementById('e-mail').value;
            var messageInsert = document.getElementById('message').value;

            var atTheRate = emailInsert.indexOf("@");
            var dotPosition = emailInsert.lastIndexOf(".");
            if(atTheRate < 1 || dotPosition < 6)
            {
              alert(nameInsert + ' Please Provide Your Proper Email!');
              return false;      //Prevents your form to being submit.
            }
            else
            {
            $.ajax({  
                url: '/send-details',
                method: 'GET',
                data: {
                    nameInsert: nameInsert,
                    emailInsert: emailInsert,
                    messageInsert: messageInsert
                },
                success: (successObj) => {
                  var successResult = JSON.parse(successObj);
                    if(successResult)
                    {
                        console.log(successResult);
                        alert('Thank You ' + nameInsert + '! Your Message Received Successfully!');
                    }
                    else
                    {
                        console.log('Message Insertion failed!');
                        alert('Message Insertion failed!');
                    }
                }
            });
            return true;    //Allows you to submit.
          }
        });
   });

0
投票

如果使用“jquery-validate”验证插件,那么您需要了解一些细节。 1.插件订阅的表单事件有《click》、《focusin》、《focusout》、《keyup》、《submit》。 也就是说,他监视表单 - 并相应地监视“提交”事件。 因此,插件无论如何都会监视表单,没有必要编写额外的脚本。

2.如果表单是通过ajax加载的,则插件无法初始化,即初始化时表单还没有DOM。 所以一个简单的解决方案是将初始化放在“click”事件中。

<script type="text/javascript">
$(document).on('click','.cart-wrapper', function(){
  $('.cart-checkout-form').validate({
        rules: {
            name: {
                required: true,
                minlength: 2
            },
    
        },
        messages: {
            name: {
                required: "Enter your name",
                minlength: "Your name must have at least 2 characters."
            },
    
        },
    
    });
});
</script>
<div class="cart-wrapper">
<form class="cart-checkout-form">
        <input type="text" 
                class="form-control" 
                name="name" 
                placeholder="Name" 
                value=""
                required />
        <input type="text" 
                class="form-control phone-field" 
                name="phone" 
                value="" 
                placeholder="+7(___)___-__-__"
                data-rule-required="true" 
                data-rule-minlength="10" 
                data-msg="Enter your phone number"
                required />

        <input type="submit" value="Checkout">
</form>
</div>


-1
投票

形成原生 JavaScript

checkValidity
函数足以触发
HTML5
验证

$(document).ready(function() {
    $('#urlSubmit').click(function() {
        if($('#urlForm')[0].checkValidity()) {
            alert("form submitting");
        }
    });
});
© www.soinside.com 2019 - 2024. All rights reserved.