如何在WordPress中的同一页面中提交表单数据而无需重新加载页面?

时间:2018-01-24 11:35:52

标签: php jquery ajax wordpress custom-wordpress-pages

我有一个自定义的PHP模板 - 表单。我试图在不重新加载页面的情况下使用AJAX在同一页面中发送此表单。提交后隐藏表单并显示thank you消息。此表单以模式显示。但是会发生什么是该页面仍在重新加载。

HTML

<form method="POST" action="" name="modalForm" id="modalForm" enctype="multipart/form-data" autocomplete="off">
        <input placeholder="Last Name*" type="text" name="lastName" id="lastName" value="" required>
        <label class="error" for="name" id="lastName_error">This field is required.</label>
        <input placeholder="First Name*" type="text" name="firstName" id="firstName" value="" required>
        <label class="error" for="name" id="firstName_error">This field is required.</label>
        <input placeholder="Email Address" type="email" name="Email" id="Email" onblur="this.setAttribute('value', this.value);" value="" required>
        <label class="error" for="email" id="email_error">This field is required.</label>
        <span class="validation-text">Please enter a valid email address.</span>
        <input placeholder="Mobile Number*" type="text" name="contactNumber" id="contactNumber" onkeypress="return isNumberKey(event)" value="" size="11" minlength="11" maxlength="11" pattern ="^09\d{9}$" required>
        <label class="error" for="contactNumber" id="contactNumber_error">This field is required.</label>
        <input type="submit" name="submit" value="Submit" id="form-submit">
</form>

JS

    (function($) {
    $('.error').hide();
    $(".button").click(function() {
      // validate and process form here

      $('.error').hide();
        var name = $("input#lastName").val();
        if (lastName == "") {
        $("label#lastName_error").show();
        $("input#lastName").focus();
        return false;
      }
        var name = $("input#firstName").val();
        if (lastName == "") {
        $("label#firstName_error").show();
        $("input#firstName").focus();
        return false;
      }
        var email = $("input#Email").val();
        if (Email == "") {
        $("label#email_error").show();
        $("input#Email").focus();
        return false;
      }
        var phone = $("input#contactNumber").val();
        if (contactNumber == "") {
        $("label#contactNumber_error").show();
        $("input#contactNumber").focus();
        return false;
      }

    });

    var dataString = 'lastName='+ lastName + '&Email=' + Email + '&contactNumber=' + contactNumber;
  //alert (dataString);return false;
  $.ajax({
    type: "POST",
    url: "/wordpress-page/",
    data: dataString,
    success: function() {
      $('#modalForm').html("<div id='message'></div>");
      $('#message').html("<h2>Contact Form Submitted!</h2>")
      .append("<p>We will be in touch soon.</p>")
      .hide()
      .fadeIn(1500, function() {
        $('#message').append("<img id='checkmark' src='images/check.png' />");
      });
    }
  });
  return false;
});

1 个答案:

答案 0 :(得分:1)

我用your codefixed code创建了一个小提琴。

  1. 整个代码尽快运行,但应该在DOM准备就绪后运行,以便选择器可以匹配DOM元素:(function($) {应该更改为($(document).ready(function(){

  2. 您的选择器$('.button')与任何元素都不匹配,在您的情况下,它应与提交按钮$('#form-submit')

  3. 匹配
  4. 我会添加preventDefault()以确保提交按钮(提交表单)的默认操作不会发生。

  5. 表单验证确实搞砸了。您正在检查未设置的变量。

  6. 您的dataString也使用未设置的变量。 (名字也缺失了。)

  7. 我交换了一个console.log的ajax调用来转储数据,但保留了成功函数。

    您的代码中存在很多小错误,看起来您在提出此问题之前没有进行太多调试就从不同来源复制了它。

    在编写代码时尝试逐步进行调试。