现代web开发中,表单是用户与网站互动的重要方式之一。HTML5为表单提交提供了强大的功能和丰富的输入类型,让收集和验证用户输入数据变得更加容易和安全。本文将详细介绍HTML5表单的各个方面,包括基本结构、输入类型、验证方法和提交过程。
HTML表单由<form>标签定义,它可以包含输入字段、标签、按钮等元素。一个基本的表单结构如下所示:
<form action="/submit_form" method="post">
<label for="name">姓名:</label>
<input type="text" id="name" name="name" required>
<label for="email">电子邮箱:</label>
<input type="email" id="email" name="email" required>
<input type="submit" value="提交">
</form>
在这个例子中,表单有两个输入字段:姓名和电子邮箱。每个输入字段都有一个<label>标签,这不仅有助于用户理解输入的内容,也有助于屏幕阅读器等辅助技术。<form>标签的action属性定义了数据提交到服务器的URL,method属性定义了提交数据的HTTP方法(通常是post或get)。
HTML5提供了多种输入类型,以支持不同的数据格式和设备。
<!-- 单行文本 -->
<input type="text" name="username" placeholder="请输入用户名" required>
<!-- 密码 -->
<input type="password" name="password" required minlength="8">
<!-- 邮箱 -->
<input type="email" name="email" required placeholder="example@domain.com">
<!-- 搜索框 -->
<input type="search" name="search" placeholder="搜索...">
<!-- 数值 -->
<input type="number" name="age" min="18" max="100" step="1" required>
<!-- 滑动条 -->
<input type="range" name="volume" min="0" max="100" step="1">
<!-- 电话号码 -->
<input type="tel" name="phone" pattern="^\+?\d{0,13}" placeholder="+8613800000000">
<!-- 日期 -->
<input type="date" name="birthdate" required>
<!-- 时间 -->
<input type="time" name="appointmenttime">
<!-- 日期和时间 -->
<input type="datetime-local" name="appointmentdatetime">
<!-- 复选框 -->
<label><input type="checkbox" name="interest" value="coding"> 编程</label>
<label><input type="checkbox" name="interest" value="music"> 音乐</label>
<!-- 单选按钮 -->
<label><input type="radio" name="gender" value="male" required> 男性</label>
<label><input type="radio" name="gender" value="female"> 女性</label>
<!-- 下拉选择 -->
<select name="country" required>
<option value="china">中国</option>
<option value="usa">美国</option>
</select>
<!-- 颜色选择器 -->
<input type="color" name="favcolor" value="#ff0000">
<!-- 文件上传 -->
<input type="file" name="resume" accept=".pdf,.docx" multiple>
HTML5表单提供了内置的验证功能,可以在数据提交到服务器之前进行检查。
<input type="text" name="username" required>
<input type="text" name="zipcode" pattern="\d{5}(-\d{4})?" title="请输入5位数的邮政编码">
<input type="number" name="age" min="18" max="99">
<input type="text" name="username" minlength="4" maxlength="8">
当用户填写完表单并点击提交按钮时,浏览器会自动检查所有输入字段的有效性。如果所有字段都满足要求,表单数据将被发送到服务器。否则,浏览器会显示错误信息,并阻止表单提交。
<input type="submit" value="提交">
可以使用JavaScript来自定义验证或处理提交事件:
document.querySelector('form').addEventListener('submit', function(event) {
// 检查表单数据
if (!this.checkValidity()) {
event.preventDefault(); // 阻止表单提交
// 自定义错误处理
}
// 可以在这里添加额外的逻辑,比如发送数据到服务器的Ajax请求
});
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>表单提交并显示JSON</title>
</head>
<body>
<!-- 表单定义 -->
<form id="myForm">
<label for="name">姓名:</label>
<input type="text" id="name" name="name">
<br>
<label for="email">电子邮件:</label>
<input type="email" id="email" name="email">
<br>
<input type="button" value="提交" onclick="submitForm()">
</form>
<script>
// JavaScript函数,处理表单提交
function submitForm() {
// 获取表单元素
var form = document.getElementById('myForm');
// 创建一个FormData对象
var formData = new FormData(form);
// 创建一个空对象来存储表单数据
var formObject = {};
// 将FormData转换为普通对象
formData.forEach(function(value, key){
formObject[key] = value;
});
// 将对象转换为JSON字符串
var jsonString = JSON.stringify(formObject);
// 弹出包含JSON字符串的对话框
alert(jsonString);
// 阻止表单的默认提交行为
return false;
}
</script>
</body>
</html>
在这个例子中:
注意,这个例子中我们使用了type="button"而不是type="submit",因为我们不希望表单有默认的提交行为。我们的JavaScript函数submitForm会处理所有的逻辑,并且通过返回false来阻止默认的表单提交。如果你想要使用type="submit",你需要在<form>标签上添加一个onsubmit="return submitForm()"属性来代替按钮上的onclick事件。
HTML5的表单功能为开发者提供了强大的工具,以便创建功能丰富、用户友好且安全的网站。通过使用HTML5的输入类型和验证方法,可以确保用户输入的数据是有效的,同时提高用户体验。随着技术的不断进步,HTML5表单和相关API将继续发展,为前端工程师提供更多的可能性。
用新技术FormData表单数据对象, 可以实现快速收集表单信息。
FormData是html5的新技术, 在主流浏览器(IE10以上版本支持)都可以正常使用。
<html>
<head>
<title>新建网页</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="description" content="" />
<meta name="keywords" content="" />
<script type="text/javascript">
window.onload = function(){
var fm = document.getElementsByTagName('form')[0];
fm.onsubmit = function(evt){
//ajax+dom无刷新获得表单信息并传递给服务器
//① 获得表单信息
//利用javascript提供的新技术快速、简单地收集全部的表单域信息
//FormData() 表单数据对象可以帮我们完成此需求
var fd = new FormData(fm);//收集fm元素节点内部的表单域信息
//也可写成var fd = new FormData(this);
//fd里边有我们收集到的全部的表单域信息
//② ajax传递表单信息
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if(xhr.readyState==4 && xhr.status==200){
alert(xhr.responseText);
}
}
xhr.open('post','./04.php');
//xhr.setRequestHeader('content-type','application/x-www-form-urlencoded');
xhr.send(fd);
//event.returnValue=false; //IE6 7 8
evt.preventDefault();//浏览器进制跳转 主流浏览器
}
}
</script>
</head>
<body>
<h2>无刷新form表单提交(FormData)</h2>
<form method="post" >
<p>用户名:<input type="text" name="username" id="mingzi"></p>
<p>密码:<input type="password" name="userpwd" id="mima"></p>
<p>邮箱:<input type="text" name="useremail" id="youxiang"></p>
<p><input type="submit" value="注册"></p>
</form>
</body>
</html>
<?php
//获得传递过来的post格式信息
print_r($_POST);
?>
注意:FormData使用
1 ajax不要设置header头
2 form表单域必须有name属性
3 IE10以上版本支持FormData, IE9不支持
单中元素的共同属性和方法:
disabled 用于获取或设置表单控件是否被禁用
注意:true为禁止 false为可用 在HTML代码中disabled="disabled"来禁用表单元素
checked 对于单选按钮和复选框而言,选中则为true
defaultChecked 对于单选按钮和复选框而言,如果初始时是选中的则为true
value 除了下拉菜单以外,所有元素的value属性值(字符串形式,如果输入表单的值为整数,所获取的值仍然为字符串)
defaultValue 对于文本框和多行文本框而言,初始设定的value值
form 指向元素所在的<form>
name 元素的name属性
type 元素的类型
blur() 使焦点离开某个元素
focus() 聚焦到某个元素上
click() 模拟用户单击该元素
select() 对于文本框、多行文本框而言,选中并高亮显示其中的文本
onsubmit:当表单提交时才触发
onsubmit这个事件一定是给form标签来使用
表单都会有一个默认提交行为, 我们得想办法阻止表单的默认提交行为, 当用户没有填写数据或者是是数据不合法就不给这个表单提交?
只要当用户填写了合法的数据才让它提交
阻止表单的默认提交行为有两种方式:
1、如果onsubmit这个事件是行内绑定时 需要有两个return
<script type="text/javascript">
//表单行内绑定时 如何阻止表单的默认提交行为?
function check_form(){
return false; // 一个return 是写在事件处理程序中, 另外一个return必须要写在行内
}
</script>
<form action="index.php" onsubmit="return check_form()">
用户名:<input type="text" name="username" /><br/>
密 码:<input type="password" name="pass" /><br/>
<input type="submit" value="提交" />
</form>
2 如果onsubmit这个事件是动态绑定时, 只需要有一个return false即可
<script type="text/javascript">
//第一步:当页面加载完成后
window.onload = function(){
//获取到id=form这个对象 然后给这个对象绑定一个onsubmit事件
//动态绑定
document.getElementById('form').onsubmit = function(){
return false; //可以阻止表单默认提交
}
}
</script>
<form action="index.php" id="form">
用户名:<input type="text" name="username" /><br/>
密 码:<input type="password" name="pass" /><br/>
<input type="submit" value="提交" />
</form>
表单的提交通常通过按钮或者具备按钮功能的图片来完成
<input type="submit" name="btnSubmit" id="btnSubmit" value="submit"/>
<input type="image" name="picSubmit" id="picSubmit" value="submit.jpg"/>
当用户单击其中一个按钮,或者按回车键就可以直接提交表单,无需其他的代码,可以在action中加入警告来检测表单是否提交;
<form method="post" name="myForm1" action="javascript:alert('Submitted');">
可以采用表单的submit()方法,这对于验证和提交表单都是十分有用的
var oForm = document.forms["myForm1"];
oForm.submit();
或者自定义按钮分配onclick()事件
<input type="button" value="Submit" onclick="document.forms['myForms'].submit()"/>
如果使用submit()方法来提交表单则不会触发<form>的onsubmit事件,这与提交按钮是不同的。
因此使用submit()方法来提交,所有验证表单的过程都应该在其之前完成。
web用户在提交表单时往往会由于网速过慢而反复单击提交按钮, 这对于服务器而言是很大的负担,
通过可以使用disabled属性来禁止这种行为,
<input type="button" value="Submit" onclick="this.disabled=true;this.form.submit();"/>
*请认真填写需求信息,我们会在24小时内与您取得联系。