9、HTML表单
HTML表单
表单是html里面,前端和服务器进行交互的一种非常重要的方式,它是和服务器交互的一种机制。
什么是表单?
收集 不同类型的 用户输入,发送 或者 提交给 服务器。
举个简单的例子:
你在马路上碰到一个大妈,大妈要你帮她做个问卷调查,你拿到问卷调查那一刻,就是你看到表单的那一刻;然后你拿起笔开始填这个问卷调查,就是你在做用户输入,输入这个表单;然后你填完了,你把这个问卷调查给了大妈,就相当于你把这个表单发送给了服务器;之后至于这个大妈拿你这个表单去干嘛了,比方说给你发垃圾短信,跟你就没什么太大关系了,就相当于说表单提交给了服务器之后,服务器还会再去做一系列的操作。这就是浏览器(或者说用户)和服务器进行交互的一种机制。
根据这个逻辑,表单就分为了两大部分:
输入:内容
-
文本(普通文本、密码)
-
单选框
-
多选框
-
下拉框
提交:提交按钮
提交就是把东西发送给服务器,这就涉及到发送的过程,发送的过程中浏览器要与服务器进行通讯,接下来就讲讲浏览器怎么样去和服务器进行做通讯。
首先我们来了解一下常用的协议:
-
http协议:超文本传输协议,它主要是保证客户机(浏览器)和服务器之间的通信。
-
http协议的最基本模式:请求-应答 模式
过程:浏览器 主动发起请求 —》服务器 接受请求 —》服务器 自身做处理 —》结果 返回浏览器 —》浏览器 根据结果展示内容
(服务器开好了就一直在那里,你不去请求它,服务器是不会为你做什么事情的)
-
浏览器常用的请求方式:GET请求,POST请求(这两个请求的相关内容在后文会涉及到,这里先不展开说)
-
< form > 标签——表单根标签
上图就是表单的最基本结构,这就相当于,大妈找你填问卷调查的时候,问卷调查的那张纸。
< input > 标签及type属性
-
< input > 标签——用来声明允许用户输入数据的 input 控件,用于搜集用户信息,它规定了用户可以在其中输入数据的输入字段。
< input > 标签在 < form > 标签中使用。
-
type属性——规定< input > 标签中输入字段的形式。
根据不同的 type 属性值,输入字段拥有很多种形式。
属性值:text(文本),password(密码),radio(单选框),checkbook(复选框),submit(提交按钮),…
文本类型 < input > 标签 & 密码类型 < input > 标签
效果:
文本类型&密码类型 < input > 标签的name属性
name属性——规定 < input > 元素的名称,用于在 JavaScript 中引用元素,或者在表单提交后引用表单数据。
注意:只有设置了 name 属性的表单元素才能在提交表单时传递它们的值。
效果:
提交前
提交后
可以看到提交的值
没有定义name属性,提交后
只能看到多了一个问号,并不能看到值
注意:输入密码时,虽然输入框中的字符以实心圆点的形式呈现,看似是保密的,但是实际上只是你从输入框中看不到具体字符,它在浏览器上依旧是明文,浏览器会以明文的形式提交。要保证浏览器传输给服务器的时候密码是密文,就涉及到加密,涉及到用JavaScript做一些更多的操作,这就等到学JavaScript的时候再详细讲解。
单选框类型 < input > 标签 及 单选框类型 < input > 标签的name属性
name属性——①规定 < input > 元素的名称,
②用于在 JavaScript 中引用元素,
③或者在表单提交后引用表单数据,
④在提交表单时传递它们的值。
⑤用于给单选框分组,同组内选项框互斥(即只能选择一个,一旦选中其中一个,其他几个自动变为未选中状态)
注:单选框(radio)必须成组(2个以上)使用才有意义,而“组”是通过name属性来建立的,凡是name相同的就是同组。同组的单选框,只有一个会处在选中状态,其他的会自动呈现为未选中状态。
name属性相同(即分组相同)
name属性不相同(即分组不同)
复选框类型 < input > 标签 及 复选框类型 < input > 标签的name属性
name属性——①规定 < input > 元素的名称,
②用于在 JavaScript 中引用元素,
③或者在表单提交后引用表单数据,
④在提交表单时传递它们的值。
⑤复选框可以不用分组,所以name可以相同也可以不同。
效果:
< select > 标签 & < option > 标签
< select > 标签——下拉框
< option > 标签——下拉框中的选项
效果:
没有正常传值
原因:在跟选择有关的控件里面(例如单选框、复选框、下拉框),所有这些控件都有一个默认值,我们这里没有设定默认值,只是在控件外面填了一些文字,看起来像是控件的值,但实际上这只是给用户看的,浏览器并不会传递这些文字给服务器,要使浏览器能够正常传递选择类控件的值,需要用到选择类控件的value属性。
value属性——规定 < input > 元素的值。
value 属性对于不同 input 类型,用法也不同:
- 对于 "button"、"reset"、"submit" 类型 - 定义按钮上的文本
- 对于 "text"、"password"、"hidden" 类型 - 定义输入字段的初始(默认)值
- 对于 "checkbox"、"radio"、"image" 类型 - 定义与 input 元素相关的值,当提交表单时该值会发送到表单的 action URL。
注意:value 属性对于 < input type="checkbox" > 和 < input type="radio" > 是必需的。
注意:value 属性不适用于 < input type="file" >。
效果:
表单的提交方式
< form > 标签的action属性——规定当提交表单时,向何处发送表单数据。
不填属性值,默认发送到当前页面
效果:
填入属性值,发送到属性值对应的页面
效果:
< form > 标签的method属性——规定用于发送表单数据的 HTTP 方法。
method 方法规定如何发送表单数据(form-data)(表单数据会被发送到在 action 属性中规定的页面中)。
表单数据可被作为 URL 变量的形式来发送(method="get")或者作为 HTTP post 事务的形式来发送(method="post")。
关于 GET 的注释:
- 将表单数据以名称/值对的形式附加到 URL 中
- URL 的长度是有限的(大约 3000 字符)
- 绝不要使用 GET 来发送敏感数据!(在 URL 中是可见的)
- 对于用户希望加入书签的表单提交很有用
- GET 更适用于非安全数据,比如在 Google 中查询字符串
关于 POST 的注释:
- 将表单数据附加到 HTTP 请求的 body 内(数据不显示在 URL 中)
- 没有长度限制
- 通过 POST 提交的表单不能加入书签
GET方法:
效果:
POST方法:
效果: