# 详细了解HTML5中的form表单
4.规范使用
<form>
元素用于组织所有表单部件(也称为控件或字段),负责告诉浏览器把数据提交到哪里,方法是在action
属性中提供一个URL。加入你只是想在客户端使用JavaScript操作表单,那么只要在action属性中指定一个井号(#)即可。
️注意:HTML5新增了一种机制,支持把表单控件放在它所在的表单外面。方法是使用心得form属性引用表单的ID值(如:form="zooForm")。不过浏览器的支持情况并不完整。
使用<form>
比较标准规范的方式,应当使用<fieldset>
元素划分“逻辑块”。每个块中都有一个<legend>
元素用于放置标题。例如某个表单中含有联系信息和地址两个逻辑部分。标准的写法应当是:
<form action="#">
<fieldset>
<legend>联系信息</legend>
<label for="name">姓名</label>
<input type="text" id="name"><br>
<label for="telephone">手机号</label>
<input type="text" id="telephone"><br>
<label for="email">邮件</label>
<input type="email">
</fieldset>
<fieldset>
<legend>地址</legend>
<label for="province">省</label>
<input type="text" id="province"><br>
<label for="city">市</label>
<input type="text" id="city"><br>
</fieldset>
<p><input type="submit" value="提交按钮"></p>
</form>
4.1 占位符文本属性 placeholder
可以为input
框指定一个占位文本用于提示用户的输入。
4.2 焦点autofocus
和伪类focus
页面中表单加载后自动获取焦点的input
元素,伪类:focus
可以让我们在css中定义input
元素获取焦点之后的样式。
4.3 客户端验证
4.3.0 required
: 用于要求用户必须输入
<label for="name">姓名</label>
<input required type="text" id="name"><br>
️注意,html5暂时并没有支持即时检查,仅在提交的时候检查,如果需要及时检查,应该使用js去实现。或者使用伪类(下面有提及)
4.3.1 使用正则表达式
HTML5支持的最强大也是最复杂的验证方法是正则表达式。它应用于HTML的Form
表单的<input>
元素。
️特别需要注意的是,在html中,不必使用
^
和$
字符表示要匹配字段值的开头和结尾。HTML5会自动确保这一点。实际上,这就是说正则表达式匹配的是字段中完整的值,验证的也是整个值的有效性。
在HTML中使用正则表达式,通过在pattern
属性将其应用到<input>
或者<textarea>
元素。例如:
<form ...>
<fieldset> ...
<legend> ...
...
<label for="text"">邮件</label>
<input type="text" pattern=".*@{1}.*(.com){1}">
...
<p><input type="submit" value="提交按钮"></p>
</form>
我们不需要为邮件指定正则表达式,html5中input元素的type属性提供了一些我们常用的输入类型,他们也会验证用户的输入规则。下面讲到。
4.3.2 自定义验证
HTML5规范了一组JavaScript属性,通过它们可以知道字段是否有效(或者强制浏览器验证这些字段)。其中,最常用的是setCustomValidity()方法
,基于这个方法,可以针对特定字段编写自定义的验证逻辑,并利用HTML5的验证机制。以下是一个使用示例:
html
<form action="#">
<fieldset>
<legend>用户评论</legend>
<label for="comments">评论</label>
<textarea oninput="onTextAreaInput(this)" name="comments_textarea" id="comments" cols="50" rows="10"></textarea>
</fieldset>
<p><input type="submit" value="提交按钮"></p>
</form>
javascript
<script>
function onTextAreaInput(input_data){
if(input_data.value.length < 20){
input_data.setCustomValidity("字符少于20");
}else{
input_data.setCustomValidity("");
}
}
</script>
我们定义了一个oninput
方法,注意该方法当然是输入的时候,不断触发。我们通过传入this
作为该函数的参数,把该元素对象传入了oninput
方法。然后再js中用形参去接收该对象。 对输入的值value
进行自定义的判断验证,然后,调用该对象中提供的setCustomValidity()
方法,传入一个字符串,用于提示和清空提示。注意,setCustomValidity()
该方法,仅在提交的时候触发,并不是实时触发的。
4.3.3 关闭验证
有时候,做测试可能会需要关闭验证。此时在<form>
元素中添加novalidate
属性即可,如:
<form id="zoomKeeperForm" action="#" novaliadate>
···
</form>
此外,还可以给提交按钮指定formnovalidate
属性以绕过验证,如:
<form id="zoomKeeperForm" action="#">
···
<input type="submit" value="无验证提交" formnovalidate>
</form>
4.3.4 验证样式挂钩
使用新的一些伪类,可以当浏览器检测到问题的时候,改变文本框的样式。
required(必填)
和optional(选填)
:根据字段中是否使用了required属性来应用不用的样式。valid(有效)
和invalid(无效)
:根据控件中是否包含错误来应用不同的样式。in-range(在范围内)
和out-of-range(超出范围)
:根据控件的min
和max
属性判断输入值是否超出范围,从而为控件应用样式。️注意,上面已经说过了,并不是实时检查的。
️HTML5中提供的验证,并不能取代服务器端验证,仅仅应该把它作为一种增强,有一些逻辑处于安全性考虑应当放在服务端去验证,例如,优惠卡,打折码之类的。
4.4 新的输入控件
html5中, <input>
元素的type
属性为我们提供了更多的选择,它们让我们的表更加聪明,他们能够:
- 提供便于编辑的辅助:例如,智能一些的浏览器可以从你的地址簿中取得电子邮件地址,帮你填写到电子邮件字段中。
- 限制可能出现的错误:例如,在数值文本框中输入的字母会被浏览器所忽略,或者无效的日期会被拒绝。
- 执行验证:在单击提交按钮的时候,浏览器可以执行更加完善的检查。例如邮件地址明显错误。
4.4.1 目前,<input>
-type
的可选属性列表
<input type="button">
<input type="checkbox">
<input type="color">
<input type="date">
<input type="datetime-local">
<input type="email">
<input type="file">
<input type="hidden">
<input type="image">
<input type="month">
<input type="number">
<input type="password">
<input type="radio">
<input type="range">
<input type="reset">
<input type="search">
<input type="submit">
<input type="tel">
<input type="text">
<input type="time">
<input type="url">
<input type="week">
# 详细了解HTML5中的form表单的更多相关文章
- Javascript中的Form表单知识点总结
Javascript中的Form表单知识点总结 在HTML中,表单是由form元素来表示的,但是在javascript中,表单则由HTMLFormElement类型,此元素继承了HTMLElement ...
- Django中的Form表单
Django中已经定义好了form类,可以很容易的使用Django生成一个表单. 一.利用Django生成一个表单: 1.在应用下创建一个forms文件,用于存放form表单.然后在forms中实例华 ...
- 小程序 <web-view></web-view> 中使用 form 表单提交
在最近的小程序项目中,使用到了 <web-view></web-view> 内嵌 H5 页面,在 H5 中需要使用 form 表单提交数据. H5 使用的技术框架是 vue+v ...
- Django中的Form表单验证
回忆一下Form表单验证的逻辑: 前端有若干个input输入框,将用户输入内容,以字典传递给后端. 后端预先存在一个Form表单验证的基类,封装了一个检测用户输入是否全部通过的方法.该方法会先定义好错 ...
- Django 中的Form表单认证
一.Form表单 1.1 Form的几个功能 验证用户数据(显示错误信息) 初始化页面显示内容 HTML Form提交保留上次提交数据 生成HTML标签 1.2 创建表单类Form 1. 创建 ...
- django中的 form 表单操作
form组件 1. 能做什么事? 1. 能生成HTML代码 input框 2. 可以校验数据 3. 保留输入的数据 4. 有错误的提示 1. 定义 from django ...
- 第83天:jQuery中操作form表单
操作form表单 1. 属性操作 设置属性: // 第一个参数表示:要设置的属性名称 // 第二个参数表示:该属性名称对应的值 $(selector).attr(“title”, “传智播客”); 获 ...
- javaWeb 中前端Form表单数据处理(手动拼json)
在前端我们会用到最多的就是form表单提交数据,在form表单中有很多都是自动将数据传到后台,然后通过实体来接受的,但是有的时候我们就是需要在前端就拿到这个Form表单的数据,这是我们就可以自己讲数据 ...
- antd中的form表单 initialValue导致数据不更新问题
初步理解 : initialValue就是所谓的defaultValue,只会在第一次赋值的时候改变,却又有一些不同,因为 initialValue又会因其他改动而改变. 然而当获取的数据重新上来要渲 ...
随机推荐
- redis学习——day01_redis简介与安装
一.Redis 简介 1.1 Redis是什么 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统.Redi ...
- TP5.0登录验证码实现
<div class="loginbox-textbox"> <input class="form-control" placeholder= ...
- linux 去除^M 换行符
一般,在windows下写的shell脚本,都会去linux执行,都会有^M 符号,那么怎么去除呢? 第一种方法:cat -A filename 就可以看到windows下的断元字符 ^M要去除他,最 ...
- 50个SQL语句(MySQL版) 问题二
--------------------------表结构-------------------------- student(StuId,StuName,StuAge,StuSex) 学生表 tea ...
- markdown的简易使用方法
markdown 的使用方法 标题的使用: 以#号开头,后面跟上空格键. 一级标题用一个#号, 二级标题用两个##.以此类推,总共六级. 段落的编写 至少使用一个空行来分割段落 :即按两次enter键 ...
- Rocket - debug - DMI
https://mp.weixin.qq.com/s/70BoeS7z4aBZK24zxdZzXA 简单介绍DMI的实现. 1. DMIConsts 定义DMI使用的常量: 其中: a. dmiDat ...
- 概念辨析-Hardware Description还是Hardware Developing?
https://mp.weixin.qq.com/s/j4Ndo1R4Go9IaGbhE_nsTg Verilog, standardized as IEEE 1364, is a hardwar ...
- treegrid树形表格的完美运用
一 问题描述: 树形表格TreeGrid在日常项目中还是运用的比较多的,哪我们在项目中,应该怎么引入和使用 TreeGrid呢? 二 使用步骤 1.首先我们需要在项目中,引入TreeGrid组件 需 ...
- JAVASE(十七) 多线程:程序、进程、线程与线程的生命周期、死锁、单例、同步锁
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 1.程序.进程.线程的理解 1.1 概念 程序(program)是为完成特定任务.用某种语言编写的一组指 ...
- golang内存逃逸
golang程序变量会携带油一组校验数据,用来证明它的整个生命周期是否在运行时完全可知.如果变量通过了这些校验,它就可以在栈上分配.否则就说它逃逸了,必须在堆上分配 能引起变量逃逸到堆上的典型 ...