HTML 表单知识点

1 表单是如何工作的?


用户在网页上填写表单并提交所填信息,浏览器将用户提交的数据发送至 Web 服务器, Web 服务器将数据传给适当的服务器脚本进行处理,处理结果会是一个全新的 HTML 页面,并经由 Web 服务器发回给浏览器,浏览器收到页面后即显示。

2 form 元素是如何工作的?


2.1 form 元素的属性

form 元素用于申明表单,定义采集数据的范围,也就是 <form></form> 里面包含的数据将被提交到服务器或者电子邮件里。主要有四个属性:

  • action:规定提交表单数据的地址,它包含了 Web 服务器的 URL,脚本所在的文件夹,处理表单数据的脚本文件名。
  • method:规定提交表单数据的方法(可能的值:get、post)。
  • target:规定在何处打开 action URL(可能的值:_blank、_self、_parent、_top)。
  • enctype:规定在发送表单数据之前如何对其进行编码,可能的值:
    • application/x-www-form-urlencoded:在发送前编码所有字符(默认)
    • text/plain:空格转换为 "+" 加号,但不对特殊字符编码
    • multipart/form-data:使用包含文件上传控件的表单时,必须使用该值

举个例子:

<form action="http://wickedlysmart.com/hfhtmlcss/contest.php" method="POST">
</form>

2.2 提交表单数据的方法—— get 和 post 的区别

GET 和 POST 是两种最常用的 HTTP 方法,GET 是向服务器发索取数据的一种请求,一般用于获取、查询资源信息而非修改信息,是幂等[1]的。POST 是向服务器提交数据的一种请求,一般用于更新资源信息。
更多区别请参阅:http://www.w3school.com.cn/tags/html_ref_httpmethods.asp

3 表单里可以有什么?


常见的 input 属性:

  • type 属性
可能的值 描述
text 定义单行的输入字段,用户可在其中输入文本,默认宽度为 20 个字符
password 定义密码字段,该字段中的字符被掩码
submit 定义提交按钮,提交按钮会把表单数据发送到服务器
button 定义可点击按钮
reset 定义重置按钮,重置按钮会清除表单中的所有数据
radio 定义单选按钮
checkbox 定义复选框
file 定义输入字段和 “浏览” 按钮,供文件上传
hidden 定义隐藏的输入字段,隐藏字段对于用户是不可见的
image 定义图像形式的提交按钮
  • name 属性
    规定 input 元素的名称,对提交到服务器后的表单数据进行标识。
    只有设置了 name 属性的表单元素才能在提交表单时传递它们的值。

  • value 属性
    规定 input 元素的值。对于不同的输入类型,value 属性的用法也不同:

    • type="button", "reset", "submit" - 定义按钮上的显示的文本
    • type="text", "password", "hidden" - 定义输入字段的初始值
    • type="checkbox", "radio", "image" - 定义与输入相关联的值

<input type="checkbox"><input type="radio"> 中必须设置 value 属性。
value 属性无法与 <input type="file"> 一同使用。

  • checked 属性
    规定此 input 元素首次加载时应当被选中,布尔属性,不需要值。
    <input type="checkbox"><input type="radio"> 配合使用。

  • maxlength 属性
    规定输入字段的最大长度,以字符个数计。
    <input type="text"><input type="password"> 配合使用。

  • placeholder 属性
    placeholder 属性的属性值会显示在表单控件中,为填写表单的人提供输入提示。一旦用户输入文本,占位文本即消失。
    如果文本输入域为空,用户提交表单时,placeholder 属性值不会提交至 Web 服务器。
    举个例子:<input type="text" name="password" placeholder="请输入密码">

  • multiple 属性
    如果使用该属性,则允许用户选择一个以上的值。

  • Required 属性
    是一个布尔属性,可用于任何表单控件,它指示一个域是必填的。
    举个例子:<input type="text" placeholder="Buckaroo Banzai" required>


3.1 文本输入

type 属性为 text 的 <input> 元素,浏览器将创建一个单行控件

<input type="text" name="fullname" value="请输入您的姓名" maxlength="20">

3.2 密码输入

type 属性为 password 的 <input> 元素,输入的文本会加掩码。但是表单数据并不会采用一种安全的方式从浏览器发送至 Web 服务器(除非你采取了安全措施),要想提高安全性,请联系你的托管公司。

<input type="password" name="secret">

3.3 提交、点击按钮和重置

type 属性为 submitt 的<input>元素,定义了提交按钮,用于向服务器发送表单数据。数据会发送到表单的 action 属性中指定的页面。

<input type="submit" value="Order Now">

type 属性为 button 的<input>元素,定义了可点击的按钮,但没有任何行为。button 类型常用于在用户点击按钮时启动 JavaScript 程序。

<input type="button" value="Click me" onclick="msg()" >

type 属性为 reset 的<input>元素,定义了重置按钮,点击重置按钮会清除表单中的所有数据。

<input type="reset">

也可以选择用 <button> 标签来创建一个按钮。

<button>submit</button>

3.4 单选钮输入

单选钮只允许从一组选项中选择其一,每个选项使用一个 type 属性为 radio 的<input>元素。
单选钮一般是成组出现的,同组的单选钮 name 属性值一致

<input type="radio" name="fruit" value="apple" id="apple" checked>
<label for="apple">apple</label>
  
<input type="radio" name="fruit" value="peach" id="peach">
<label for="peach">peach</label>
  
<input type="radio" name="fruit" value="banana" id="banana">
<label for="banana">banana</label>

3.5 复选框输入

type 属性为checkbox的 <input> 元素,浏览器将创建一个复选框控件,可以选中,也可以不选中。
复选框一般是成组出现的,同组的复选框 name 属性值一致

<input type="checkbox" name="fruit" value="apple" id="apple" checked>
<label for="apple">apple</label>

<input type="checkbox" name="fruit" value="peach" id="peach">
<label for="peach">peach</label>

<input type="checkbox" name="fruit" value="banana" id="banana">
<label for="banana">banana</label>

3.6 文件输入

type 属性为 file 的 <input> 元素会创建一个文件输入控件,允许你上传文件至 Web 服务器。使用这个元素的前提是,表单数据的上传方法必须为POST。
accpet 属性只能与 <input type="file"> 配合使用。它规定能够通过文件上传进行提交的文件类型。

<input type="file" accept="image/gif, image/png" multiple="multiple">

提示:
1. 如果不限制图像的格式,可以写为:accept="image/*"。
2. 请避免使用该属性。应该在服务器端验证文件上传。

3.7 创建一个菜单

  • <select><option> 元素结合使用可以创建菜单,option 元素用来表示各个菜单项。
  • <option> 元素不需要 name 属性,因为 <select> 元素已经为整个菜单指定了名字。
  • 浏览器将用户填写的表单信息发送至Web服务器时,会选用 <select> 元素的 name 属性名和 <option> 元素的 value 属性名,例如:characters ="Buckaroo"。
  • <option> 元素的 selected 属性规定在页面加载时预先选定该选项。
<select name="characters">
<option value="Buckaroo">Buckaroo Banzai</option>
<option value="Tommy">Perfect Tommy</option>
<option value="Penny" selected>Penny Priddy</option>
<option value="Jersey">New Jersey</option>
<option value="John">John Parker</option>
</select>

如果为 <select> 元素增加布尔属性 multiple,单选菜单即变成一个多选菜单。选择菜单项目时同时按下 Ctrl(Windows) 或 Command(Mac) 键,可以选择多个选项。

<select name="characters" multiple="multiple">
<option value="Buckaroo">Buckaroo Banzai</option>
<option value="Tommy">Perfect Tommy</option>
<option value="Penny" selected>Penny Priddy</option>
<option value="Jersey">New Jersey</option>
<option value="John">John Parker</option>
</select>

3.8 文本区

<textarea> 元素会创建一个多行的文本区,如输入的文本在文本框中放不下,右边还会出现一个滚动条。
<textarea> 元素不是一个 void 元素,开始和结束标记之间的所有文本会成为浏览器文本区控件中的初始文本。
<textarea> 元素可容纳无限数量的文本,其中的文本的默认字体是等宽字体(通常是 Courier)。

属性 描述 语法
cols 规定文本区内的可见宽度(以平均字符数计) <textarea rows="value">
rows 规定文本区内的可见行数(以行数计) <textarea cols="value">
autofocus 是逻辑属性,规定在页面加载后文本区域自动获得焦点 <textarea autofocus>
disabled 规定禁用文本区。被禁用的文本区既不可用,也不可点击 <textarea disabled="value">
form 规定 <textarea> 元素所属的 form 元素,该属性的值必须是同一文档中的某个 <form> 元素的 id 属性 <textarea form="form_id">
maxlength 规定文本区域的最大字符数 <textarea maxlength="number">
name 规定文本区的名称 <textarea name="value">
placeholder 规定描述文本区域预期值的简短提示 <textarea placeholder="text">
readonly 规定文本区为只读,无法对内容进行修改,但用户可以通过 tab 键切换到该控件,选取或复制其中的内容 <textarea readonly="value">
required 是逻辑属性,规定文本区域是必填的 <textarea required>
wrap 规定当在表单中提交时,文本区域中的文本如何换行,默认属性值为 soft ,即提交表单时文本不换行。当属性值为 hard 时,文本换行(包含换行符),此时必须规定 cols 属性。 <textarea wrap="soft / hard">
<textarea name="comments" rows="8" cols="8" autofocus>请输入文本</textarea>

3.9 被隐藏的段落

type 属性为 hidden 的 <input> 元素,定义了隐藏的字段。隐藏字段对于用户是不可见的。隐藏字段通常会存储一个默认值,它们的值也可以由 JavaScript 进行修改。

<input type="hidden" name="country" value="Norway" >

3.10 插入图片

type 属性为 image 的 <input> 元素,定义了图像形式的提交按钮。

属性 描述
src 属性 规定作为提交按钮显示的图像的 URL
alt 属性 由于某些原因无法查看图像时提供备选的信息
<input type="image" src="submit.gif" alt="Submit" />

以下为 HTML 5 的元素新属性


3.11 数字输入

type 属性为 number 的 <input> 元素,浏览器将会限制只能输入数字。

属性 描述
max 规定允许的最大值
min 规定允许的最小值
step 规定合法的数字间隔(如果 step="3",则合法的数是 -3,0,3,6 等)
value 规定默认值
<input type="number" min="0" max="10" step="2" value="6">

3.12 范围输入

type 属性为 range 的 <input> 元素类似于 number,只是它会显示一个滑动条,而不是一个输入框。

属性 描述
max 规定允许的最大值
min 规定允许的最小值
step 规定合法的数字间隔(如果 step="3",则合法的数是 -3,0,3,6 等)
value 规定默认值
<input type="range" min="0" max="10" step="2">

3.13 颜色输入

type 属性为 color 的 <input> 元素用于从拾色器中选取颜色。

<input type="color" name="user_color">

3.14 日期输入(Date Pickers)

type 属性为 date 的 <input> 元素可以指定一个日期。

<input type="date" name="user_date">                      选取日、月、年
<input type="month" name="user_month">                    选取月、年
<input type="week" name="user_week">                      选取周、年
<input type="time" name="user_time">                      选取时间(小时和分钟)
<input type="datetime" name="user_datetime">              选取时间、日、月、年(UTC 时间)
<input type="datetime-local" name="user_datetime-local">  选取时间、日、月、年(本地时间)

3.15 Email 输入和 URL 输入

type 属性为 email 和 url 的 <input> 元素其实就是一个文本输入元素,只不过在一些浏览器上会显示一个方便输入 email 或 url 的定制键盘。

<input type="email" name="user_email">
<input type="url" name="user_url">

3.16 search 搜索域

type 属性为 search 的 <input> 元素用于搜索域,比如站点搜索或 Google 搜索。
search 域显示为常规的文本域,在搜索框中输入内容时,文本后会自动出现一个小 ×,用于清除输入的内容。

<input type="search" placeholder="搜索">

3.17 组合表单

<fieldset>
    <legend>Personal Information</legend>
    姓名:<input type="text" name="fullname">
    性别:<input type="radio" name="sex" value="male"> 男
         <input type="radio" name="sex" value="female"> 女
    生日:<input type="date" name="birthday">
    爱好:<textarea></textarea>
</fieldset>

4 表单的元素名(name)如何工作?


每个表单控件都有一个 name 属性,它相当于表单和处理表单的服务器脚本之间的一个粘合剂。提交表单时,name 属性值将作为数据的标签一起被浏览器发送至 Web 服务器。只有设置了 name 属性的表单元素才能在提交表单时传递它们的值。

5 关于可访问性——为表单元素添加标签


可以用 label 元素为表单元素添加标签。每个表单元素的id属性值必须是唯一的。
点击 <label> 标签内的文本,浏览器会自动选中与 <label> 标签相关的表单控件。
<label> 标签的 for 属性应当与相关表单控件的 id 属性相同。

<input type="radio" name="hotornot" value="hot" id="hot">
<label for="hot">hot</label>

<input type="radio" name="hotornot" value="not" id="not">
<label for="not">not</label>

  1. 对同一URL的多个请求应该返回同样的结果。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • form标签有什么作用 Answer1:将表单内部的各种HTML标记和内容包裹起来,类似于DIV的作用,当页面收到...
    勃王阅读 245评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,494评论 18 139
  • 表单基础知识 在HTML中,表单是由 元素来表示的,而在JS中,表单对应的则是HTMLFormElement类型。...
    oWSQo阅读 900评论 0 1
  • 《裕语言》速成开发手册3.0 官方用户交流:iApp开发交流(1) 239547050iApp开发交流(2) 10...
    叶染柒丶阅读 25,265评论 5 18
  • 本人做php的,最近发现JS真的是博大精深啊,比PHP难.在HTML中,表单是由form元素来表示的,但是在jav...
    linfree阅读 2,108评论 3 17