JavaScript 表单
摘要:在本教程中,您将学习有关 JavaScript 表单 API 的知识:访问表单、获取元素的值、验证表单数据以及提交表单。
表单基础知识要在 HTML 中创建表单,可以使用
Code language: HTML, XML (xml)Code language: HTML, XML (xml)要访问表单的元素,请先获取表单元素
const form = document.getElementById('signup');Code language: JavaScript (javascript)并使用索引、ID 或名称访问元素。以下访问第一个表单元素
form.elements[0]; // by index
form.elements['name']; // by name
form.elements['name']; // by id (name & id are the same in this case)Code language: JavaScript (javascript)以下访问第二个输入元素
form.elements[1]; // by index
form.elements['email']; // by name
form.elements['email']; // by idCode language: JavaScript (javascript)访问表单字段后,可以使用value属性访问其值,例如
const form = document.getElementById('signup');
const name = form.elements['name'];
const email = form.elements['email'];
// getting the element's value
let fullName = name.value;
let emailAddress = email.value;Code language: JavaScript (javascript)将所有内容整合在一起:注册表单以下说明了包含注册表单的 HTML 文档。 在此处查看实时演示。
Code language: HTML, XML (xml)HTML 文档引用了style.css和app.js文件。它使用元素在元素具有无效数据的情况下显示错误消息。
在不提供任何信息的情况下提交表单将导致以下错误
使用姓名但电子邮件地址格式无效提交表单将导致以下错误
以下显示了完整的app.js文件
// show a message with a type of the input
function showMessage(input, message, type) {
// get the small element and set the message
const msg = input.parentNode.querySelector("small");
msg.innerText = message;
// update the class for the input
input.className = type ? "success" : "error";
return type;
}
function showError(input, message) {
return showMessage(input, message, false);
}
function showSuccess(input) {
return showMessage(input, "", true);
}
function hasValue(input, message) {
if (input.value.trim() === "") {
return showError(input, message);
}
return showSuccess(input);
}
function validateEmail(input, requiredMsg, invalidMsg) {
// check if the value is not empty
if (!hasValue(input, requiredMsg)) {
return false;
}
// validate email format
const emailRegex =
/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
const email = input.value.trim();
if (!emailRegex.test(email)) {
return showError(input, invalidMsg);
}
return true;
}
const form = document.querySelector("#signup");
const NAME_REQUIRED = "Please enter your name";
const EMAIL_REQUIRED = "Please enter your email";
const EMAIL_INVALID = "Please enter a correct email address format";
form.addEventListener("submit", function (event) {
// stop form submission
event.preventDefault();
// validate the form
let nameValid = hasValue(form.elements["name"], NAME_REQUIRED);
let emailValid = validateEmail(form.elements["email"], EMAIL_REQUIRED, EMAIL_INVALID);
// if valid, submit the form.
if (nameValid && emailValid) {
alert("Demo only. No form was posted.");
}
});
Code language: JavaScript (javascript)它是如何工作的。
showMessage()函数showMessage()函数接受一个输入元素、一条消息和一个类型
// show a message with a type of the input
function showMessage(input, message, type) {
// get the element and set the message
const msg = input.parentNode.querySelector("small");
msg.innerText = message;
// update the class for the input
input.className = type ? "success" : "error";
return type;
}Code language: JavaScript (javascript)以下显示表单上的姓名输入字段
input.parentNodeCode language: CSS (css)接下来,您需要选择元素
const msg = input.parentNode.querySelector("small");Code language: JavaScript (javascript)然后,更新消息
msg.innerText = message;之后,我们根据类型参数的值更改输入字段的 CSS 类。如果类型为 true,则将输入的类更改为 success。否则,我们将类更改为 error。
input.className = type ? "success" : "error";Code language: JavaScript (javascript)最后,返回类型的 value
return type;Code language: JavaScript (javascript)showError()和showSuccess()函数showError()和showSuccess()函数调用showMessage()函数。showError()函数始终返回false,而showSuccess()函数始终返回true。此外,showSuccess()函数将错误消息设置为空字符串。
function showError(input, message) {
return showMessage(input, message, false);
}
function showSuccess(input) {
return showMessage(input, "", true);
}Code language: JavaScript (javascript)hasValue()函数hasValue()函数检查输入元素是否有值,并根据情况使用showError()或showSuccess()函数显示错误消息
function hasValue(input, message) {
if (input.value.trim() === "") {
return showError(input, message);
}
return showSuccess(input);
}Code language: JavaScript (javascript)validateEmail()函数validateEmail()函数验证电子邮件字段是否包含有效的电子邮件地址
function validateEmail(input, requiredMsg, invalidMsg) {
// check if the value is not empty
if (!hasValue(input, requiredMsg)) {
return false;
}
// validate email format
const emailRegex =
/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
const email = input.value.trim();
if (!emailRegex.test(email)) {
return showError(input, invalidMsg);
}
return true;
}Code language: PHP (php)validateEmail()函数调用hasValue()函数检查字段值是否为空。如果输入字段为空,则会显示requiredMsg。
要验证电子邮件,它使用正则表达式。如果电子邮件无效,则validateEmail()函数会显示invalidMsg。
提交事件处理程序首先,使用querySelector()方法按 ID 选择注册表单
const form = document.querySelector("#signup");Code language: JavaScript (javascript)其次,定义一些常量来存储错误消息
const NAME_REQUIRED = "Please enter your name";
const EMAIL_REQUIRED = "Please enter your email";
const EMAIL_INVALID = "Please enter a correct email address format";Code language: JavaScript (javascript)第三,使用addEventListener()方法添加注册表单的submit事件侦听器
form.addEventListener("submit", function (event) {
// stop form submission
event.preventDefault();
// validate the form
let nameValid = hasValue(form.elements["name"], NAME_REQUIRED);
let emailValid = validateEmail(form.elements["email"], EMAIL_REQUIRED, EMAIL_INVALID);
// if valid, submit the form.
if (nameValid && emailValid) {
alert("Demo only. No form was posted.");
}
});
Code language: JavaScript (javascript)在提交事件处理程序中
通过调用event.preventDefault()方法停止表单提交。使用hasValue()和validateEmail()函数验证姓名和电子邮件字段。如果姓名和电子邮件均有效,则显示警报。在实际应用中,您需要调用form.submit()方法提交表单。总结使用
网易CC手机版 V4.1.3(503107) 安卓最新版