【问题标题】:Wordpress & Ajax Form, Why is my form submitting before running my custom validate function?Wordpress 和 Ajax 表单,为什么我的表单在运行我的自定义验证功能之前提交?
【发布时间】:2016-03-31 18:09:02
【问题描述】:

我正在尝试让 ajax 检查我的邮政编码,使用自定义函数 isValid(),并在提交表单之前更改表单操作。

目前,如果在其中一个 zipCode 数组中找到邮政编码:

var zipPriorityAcura = [ 23320, 23321, 23322, 23323, 23324, 23325, 23434, 23435, 23463, 23464, 23502, 23503, 23504, 23505, 23507, 23508, 23509, 23510, 23511, 23513, 23517, 23518, 23523, 23529, 23701, 23702, 23703, 23704, 23707, 23708, 23709, 27921, 27958, 27976 ]; var zipHallAcuraNewportNews = [ 123 ]; var zipHallAcuraVirginiaBeach = [ 456 ];

它将更改为正确的表单处理文件。然后正确提交。

但是,如果在其中一个数组中找不到用户输入的邮政编码,那么它应该触发一个弹出窗口,允许用户选择表单将发送到的位置,然后表单将发送到所选位置。

相反,如果输入的邮政编码不在数组中,它将首先提交表单,然后打开弹出窗口将表单发送到用户选择的位置。

显然这行不通。

这是我的 ajax:

$("#leadForm").validate({
rules: {
  firstName: "required",
  lastName: "required",
  email: {
    required: true,
    email: true
  },
  zipCode: "required",
  phone: "required"

}, // end rules
messages: {
  firstName: "Please enter your first name",
  lastName: "Please enter your last name",
  email: "Please enter a valid email address",
  zipCode: "Please enter a valid zip code",
  phone: "Please enter a valid phone number"
}, // end messages

submitHandler: function(form) {

  var form = $("#leadForm"); // contact form
  var submitButton = $("#leadForm button"); // submit button
  var message = $('#ajaxMessage'); // alert div for show alert message

  isValid();

$.ajax({
    url: $(form).attr('action'), // form action url
    type: 'POST', // form submit method get/post
    data: form.serialize(), // serialize form data
    beforeSend: function() {
      message.fadeOut();
      submitButton.html('Sending....'); // change submit button text
    },
    success: function(data) {
      message.html(data.message).fadeIn(); // fade in response data
      form.trigger('reset'); // reset form
      $('#contact-dealer fieldset input').removeClass("valid error");
      submitButton.html('Contact Your Local Acura Dealer'); // reset submit button text
      message.html(data.message).delay( 1400 ).fadeOut(); // fade in response data
    },
    error: function(e) {
      console.log(e);
    }
    });
  } // end submit handler
}); //end validate

这是检查输入邮政编码的验证函数:

//isValid Zipcode Validation for ASA
    function isValid(){

        var zipCode = parseInt($("form[name='leadForm'] input[name='zipCode']").val(), 10);
        var $leadForm = $("form[name='leadForm']");


        var calculatePriorityAcura = $.inArray(zipCode, zipPriorityAcura);


        var calculateHallAcuraNewportNews = $.inArray(zipCode, zipHallAcuraNewportNews);


        var calculateHallAcuraVirginiaBeach = $.inArray(zipCode, zipHallAcuraVirginiaBeach);


            if (calculatePriorityAcura > -1) {
            $leadForm.attr('action', 'http://cdn.moranautoads.com/hrad/wp-content/themes/hrad-2016/forms/PriorityAcura.php');
            ga('send', 'event', 'Form Submission', 'Priority Acura' , 'Sidebar Form');
            return true;
        }
            else if (calculateHallAcuraNewportNews > -1) {
            $leadForm.attr('action', 'http://cdn.moranautoads.com/hrad/wp-content/themes/hrad-2016/forms/HallAcuraNewportNews.php');
            ga('send', 'event', 'Form Submission', 'Hall Acura Newport News' , 'Sidebar Form');
            return true;
        }
            else if (calculateHallAcuraVirginiaBeach > -1) {
            $leadForm.attr('action', 'http://cdn.moranautoads.com/hrad/wp-content/themes/hrad-2016/forms/HallAcuraVirginiaBeach.php');
            ga('send', 'event', 'Form Submission', 'Hall Acura Virginia Beach' , 'Sidebar Form');
            return true;
        }
            else {
            $('#contact-lead.overlay').show();
            setTimeout(function(){
                $('#contact-lead.overlay .zipcode-modal').addClass('animated fadeInUp').show();
            }, 200);
            return false;
        }
    }

我非常感谢任何帮助,我现在迷路了。 谢谢

【问题讨论】:

  • 您是在 isValid() 函数中添加 zipPriorityAcura 数组,对吧?
  • 是的,它拉入一个变量:var calculatePriorityAcura = $.inArray(zipCode, zipPriorityAcura); 然后,如果在计算中找到它,它会返回true并提交表单:if (calculatePriorityAcura > -1) { $leadForm.attr('action', 'http://cdn.moranautoads.com/hrad/wp-content/themes/hrad-2016/forms/PriorityAcura.php'); ga('send', 'event', 'Form Submission', 'Priority Acura' , 'Sidebar Form'); return true; }
  • 另外,补充一点,这部分进展顺利。邮政编码被正确检查并在它们是数组的一部分时被发现,但唯一的下降是当它们不在数组中时。当它们不在数组中时,表单只是提交而不是先加载带有按钮的弹出窗口。
  • 请原谅我是一个新手来验证,但是为什么isValid返回一个值,但你不使用它或从调用函数返回false?
  • 也许您需要 isvalid 作为自定义规则,而不是在提交处理程序中 stackoverflow.com/questions/241145/…

标签: jquery ajax wordpress jquery-validate form-submit


【解决方案1】:

尝试更改提交处理程序以防止提交按钮的默认行为。

submitHandler: function(form, event) { 

      //Your logic here
      if(isValid())
      {
         $.ajax({ }); //Your logic
      }
      else
      {
          event.preventDefault();
      }
});

【讨论】:

  • 这导致表单根本无法发送电子邮件,但仍然触发“成功消息”显示。
  • 这就是我需要的!谢谢
猜你喜欢
  • 2018-07-11
  • 2023-03-02
  • 2011-02-22
  • 1970-01-01
  • 1970-01-01
  • 2021-04-21
  • 2020-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多