在本教程中,我将向您展示做到这一点是多么容易——使用 jquery 验证和提交联系表单,而无需刷新页面!让我们开始吧。
我们正在建造什么
在此示例中,我们有一个简单的联系表单,其中包含姓名、电子邮件和电话号码。该表单使用原生 jQuery 函数将所有字段提交到php脚本,无需任何页面刷新。
1. 构建 html 表单
让我们看一下我们的 HTML 标记。我们从基本的 HTML 表单开始:
<div id="contact_form"> <form name="contact" action=""> <fieldset> <div class="input-box"> <label for="name" id="name_label">Name</label> <input type="text" name="name" id="name" minlength="3" placeholder="Monty" class="text-input" required/> </div> <div class="input-box"> <label for="email" id="email_label">Email</label> <input type="email" name="email" id="email" placeholder="example@www.weixiaolive.com" class="text-input"/> </div> <div class="input-box"> <label for="phone" id="phone_label">Phone</label> <input type="tel" name="phone" id="phone" class="text-input" placeholder="856-261-9988"/> </div> <input type="submit" name="submit" class="button" id="submit_btn" value="Send" /> </fieldset> </form> <div class="greetings"> <h1>Contact US</h1> <p>We are waiting to hear from you!</p> </div> </div>
您可能会注意到我 在整个表单中包含了一个div 带有 id 的内容。contact_form
请务必不要 div 以您自己的形式错过它,因为我们稍后将需要这个包装器 div 。您可能还注意到我将表单标记的操作和方法部分都留空了。我们实际上在这里不需要任何一个,因为 jQuery 会在以后处理这一切。
另一个重要的事情是确保包含 id 每个输入字段的值。这些 id 值是您的 jQuery 脚本在处理表单时要查找的值。
我们还使用html5属性(如 required 和 )进行了一些非常基本的客户端验证minlength。该 minlength 属性将确保用户提供至少三个字符长的名称。同样,该 required 属性确保用户填写您需要的所有表单值。
您可以在我们关于仅使用 HTML5 和 Regex 验证表单输入的教程中阅读有关这些属性的更多信息 。
仅使用 HTML5 和正则表达式的 HTML5 表单输入验证 Monty Shokeen
我添加了一些css样式来生成以下表单:
* { box-sizing: border-box; } body { font-family: 'Roboto Slab'; font-size: 1.5rem; font-weight: 300; } div#contact_form { width: 800px; display: flex; align-items: stretch; justify-content: space-evenly; border: 2px solid black; padding: 10px; } div.input-box { display: flex; margin: 10px 0; flex-wrap: wrap; } div.input-box label { display: inline-block; margin: 10px 10px 10px 0; width: 20%; } div.input-box input { font-size: 1.5rem; border: 1px solid #ccc; padding: 4px 8px; flex: 1; } input.button { font-size: 1.5rem; background: black; color: white; border: 1px solid black; margin: 10px; padding: 4px 40px; } h1 { font-size: 5rem; text-transform: uppercase; font-family: 'Passion One'; font-weight: 400; letter-spacing: 2px; line-height: 0.8; } div.greetings { text-align: center; font-size: 1.2rem; background-color: #d3d3d3; background-image: linear-gradient(15deg, transparent 28%, rgba(255, 255, 255, 0.5) 28%); background-size: 50px; } div.input-box input.error { border: 2px dashed red; background: #fee; } div.input-box label.error { color: red; font-size: 1rem; text-align: right; width: 100%; margin: 10px 0; }
2. 开始添加jQuery
该过程的下一步是添加一些 jQuery 代码。我假设你已经 下载了 jQuery,上传到你的服务器,并且 在你的网页中引用了它。
接下来,打开另一个新的 javascript 文件,在 HTML 中引用它,就像在任何普通的 JavaScript 文件中一样,并添加以下内容:
$(function() { // set up form validation here });
该函数在 HTML 文档准备好后立即运行。如果你之前在 jQuery 中做过任何工作,这个函数和 jQuery 的 document.ready 函数是一样的。在里面,我们将设置我们的验证码。
3. 编写一些表单验证
我们现在将使用 jQuery 编写一些基本的表单验证。这将改进我们迄今为止的验证。使用验证库可以让我们更好地控制向用户显示的错误消息。它还需要对表单的标记进行最少的更改或不需要更改。
首先在您的网页上加载 jQuery Validation 库。现在,只需添加以下代码:
$(function () { $("form").validate(); });
validate() 确保在调用方法时传递了正确的选择器 。这将验证表单,而无需您在 HTML 中编写任何错误消息或在 javaScript 中显示和隐藏不同错误消息的逻辑。尝试在不填写任何值或故意添加错误输入的情况下提交表单。该表单将显示一个很好的错误消息,如下图所示。
使用验证库还允许您向表单添加条件验证逻辑。例如,只有在未提供电子邮件地址时,您才能添加需要电话号码的代码。我在jQuery 表单验证教程中对此进行了更详细的介绍 。
使用 jQuery Monty Shokeen 的 JavaScript 简单表单验证
4.使用 jQuery ajax函数 处理表单提交
现在我们进入教程的核心——提交表单而不刷新页面,它将表单值发送到后台的 PHP 脚本。让我们先看一下所有代码,然后我将其分解为更详细的内容。在我们之前添加的验证片段下方添加以下代码:
$( "form" ).on( "submit", function(e) { var dataString = $(this).serialize(); // alert(dataString); return false; $.ajax({ type: "post", url: "bin/process.php", data: dataString, success: function () { $("#contact_form").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' />" ); }); } }); e.preventDefault(); }); });
这里发生了很多事情!让我们把它全部分解——一旦你了解了这个过程,它就非常简单易用。
我们首先创建一个值字符串,它们是我们想要传递给发送电子邮件的脚本的所有表单值。这可以很容易地使用 serialize() jQuery 中的内置方法来实现。这样您就不必担心自己获取和连接不同有效用户输入的值。
我已经注释掉了一个警告,我有时会使用它来确保我获取了正确的值,您可能会在此过程中发现它很有帮助。如果您取消注释该警报并测试您的表单,假设到目前为止一切正常,您应该会收到类似于以下内容的消息:
现在我们来看看我们的主要 AJAX 函数,即今天节目的主角。这是所有动作发生的地方,所以要密切注意!
$("form").on("submit", function (e) { var dataString = $(this).serialize(); $.ajax({ type: "POST", url: "bin/process.php", data: dataString, success: function () { // Display message back to the user here } }); e.preventDefault(); });
基本上,代码中发生的事情是这样的:该 .ajax() 函数处理来自我们 使用名为bin/processdataString 的 PHP 脚本调用 的字符串中的值。php,使用 HTTP POST 方法类型。如果我们的脚本处理成功,我们可以向用户显示一条消息,最后 页面不会重新加载。就是这样!整个过程就在这几行中处理!return false
除了提供成功信息之外,您还可以在此处执行更高级的操作。例如,您可以将值发送到数据库,对其进行处理,然后将结果显示给用户。因此,如果您向用户发布投票,您可以处理他们的投票,然后返回投票结果,这一切都不需要任何页面刷新。
让我们总结一下我们的示例中发生的事情,以确保我们已经涵盖了所有内容。我们使用 jQuery serialize() 方法获取表单值,然后将它们放入字符串中,如下所示:
var dataString = $(this).serialize();
然后我们使用 jQuery 的 ajax() 函数来处理 dataString. 该过程成功完成后,我们向用户显示一条消息, return false 这样我们的页面就不会刷新:
$.ajax({ type: "POST", url: "bin/process.php", data: dataString, success: function() { $('#contact_form').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;
脚本的成功部分已经填充了一些可以返回给用户的特定内容。但就我们的 AJAX 功能而言,仅此而已。有关更多选项和设置,请务必查看 jQuery 关于 ajax 函数的文档。这里的示例是更简单的实现之一,但即便如此,它仍然非常强大,如您所见。
5. 向用户显示一条消息
让我们简要看一下将我们的消息显示给用户的代码部分,以完成本教程。
首先,我们使用以下行更改 #contact_form div (记住我说过我们需要它div)的全部内容:
$('#contact_form').html("<div id='message'></div>");
html() 这使用 jQuery 的函数替换了联系表单中的所有内容 。div 因此,我们现在有了一个带有idof 的 new 而不是一个表单 message。接下来,我们用一个实际的消息填充该 div:一个 h2 说 Contact Form Submitted:
$('#message').html("<h2>已提交联系表格!</h2>")
我们将使用 jQuery 函数为消息添加更多内容, append() 最重要的是,我们通过使用 jQuery 函数隐藏消息 div 来添加一个很酷的效果 hide() ,然后使用该 fadeIn() 函数将其淡入:
.append("<p>我们会尽快与您联系。</p>") .hide() .fadeIn(1500, function() { $('#message').append("<img id='checkmark' src='images/check.png' />"); });
因此,用户在提交表单后最终会看到以下内容:
结论
到现在为止,我想你必须同意,使用 jQuery 的强大 ajax() 功能在不刷新页面的情况下提交表单是非常容易的。只需获取 JavaScript 文件中的值,使用 ajax() 函数处理它们,然后返回 false. 您可以像处理任何其他 PHP 文件一样处理 PHP 脚本中的值,唯一的区别是用户不必等待页面刷新——这一切都在后台静默进行。
因此,如果您的网站上有联系表单、登录表单,或者更高级的表单可以通过数据库处理值并检索结果,那么您可以使用 AJAX 轻松高效地完成这一切。