博客列表 >FORM表单

FORM表单

茂林
茂林原创
2023年02月01日 17:15:09783浏览

一. 表单概念

表单:是一个复合元素,用多个标签描述

二. 常用标签

1 <form></form>:表单控件容器

1.1 form.action:后端处理的脚本属性
1.2 form.method:表单数据提交方式,默认为 GET
(1)GET:数据以键值对方式,添加到 url 中,适合数量少且可公开的数据,如页码
(2)POST:数据在请求体中, url 不可见,适合大量或敏感的数据,如密码,文件上传
1.3 form.enctype:表单数据编码方案
(1)application/x-www-form-urlencoded: 默认对值对的编码方案
(2)multipart/form-data: 分块,原始数据,适用文件上传
1.4 form.target:_self(默认,在本页打开链接),_blank,和 a.target 相同,新页面打开链接
1.5 form.id:表单引用
1.6 form.onsubmit:表单提交事件,返回 false,可拦截提交请求

  1. <form
  2. action="login.php"
  3. method="post"
  4. enctype="application/x-www-form-urlencoded"
  5. target="_self"
  6. id="login"
  7. ></form>

2 <fieldset></fieldset>:表单分组容器

3 <legend></legend>:控件标签名称,字段集图例元素

4 <label></label>:表示用户界面中某个元素的说明

备注:label.for 属性 === input.id 属性 的值进行绑定(值相同),光标绑定。

  1. <!-- style="display: inline-grid; gap: 1em" fieldset容器的样式 -->
  2. <fieldset style="display: inline-grid; gap: 1em">
  3. <legend>用户登录</legend>
  4. <div class="username">
  5. <label for="username">账号:</label>
  6. <input type="text" name="u_name" id="username" />
  7. </div>
  8. <div class="psd">
  9. <label for="psd">密码:</label>
  10. <input type="password" name="psd" id="psd" />
  11. </div>
  12. <div class="button">
  13. <button>登录</button>
  14. </div>
  15. </fieldset>

以上合成的效果如下
以上合成的效果如下
login

<input >输入控件,类型由 type 属性决定

常用属性如下
5.1 input.type="text": 输入单行文本(默认)
5.2 input.type="email":邮箱控件
5.3 input.type="password":密码控件(密文)
5.4 input.type="number":数值控件 value 属性默认值,min 属性最小值,max 属性最大值 step 属性步长
5.5 input.type="date":日期控件 (除 date 值以外,还有 month,week,time,datetime-local)
5.6 input.type="color": 拾色器
5.7 input.type="url": URL 控件
5.8 input.type="search": 搜索框控件
5.9 input.type="hidden": 隐藏域控件
5.10 input.type="file": 文本域控件
5.11 input.type="radio": 单选按钮
5.12 input.type="checkbox": 复选框
5.13 select.name+option.value: 下拉列表框
5.14 input.list+datalist.id: 预定义列表框
5.15 textarea.cols/rows: 文本域(多行文本框)


5.16 input.name:表单的控件名称,作为键值对的一部分与表单一同提交
5.17 input.placeholder:当没有值设定时,出现在表单控件上的文字
5.18 input.required:布尔值,如果存在,一个值是必需的,或者必须勾选该值才能提交表格。
5.19 input.autofocus:自动焦点,文档或对话框中只有一个元素可以具有自动对焦属性。如果应用于多个元素,第一个将获得焦点

6 button 按钮,默认同步提交(type=”submit”)

6.1 button.type: 按钮(默认提交:type=”submit”)
6.2 button.disabled:布尔属性,存在就是 true,不写就是 false

  1. <form action="xxx.php" method="post">
  2. <fieldset style="display: inline-grid; gap: 1em">
  3. <legend>用户注册</legend>
  4. <!-- input.type = text 单行文本控件 -->
  5. <div class="username">
  6. <label for="uname">用户:</label>
  7. <input
  8. type="text"
  9. name="username"
  10. id="uname"
  11. placeholder="username"
  12. id="uname"
  13. autofocus
  14. required
  15. />
  16. </div>
  17. <div class="myemail">
  18. <label for="myemail">邮箱:</label>
  19. <!-- input.type = email 邮箱控件使用 -->
  20. <input
  21. type="email"
  22. name="email"
  23. id="myemail"
  24. placeholder="username@email.com"
  25. required
  26. />
  27. </div>
  28. <div class="psw">
  29. <label for="psw">密码:</label>
  30. <!-- input.type = password密码控件的使用 -->
  31. <!-- onkeydown="this.nextElementSibling.disabled=false"
  32. 密码显示与隐藏的脚本 -->
  33. <input
  34. type="password"
  35. name="password"
  36. id="psw"
  37. placeholder="******"
  38. required
  39. onkeydown="this.nextElementSibling.disabled=false"
  40. />
  41. <!-- disabled: 布尔属性, 存在就是true,不写就是false -->
  42. <!-- 事件属性: on+事件名称, 点击事件属性: onclick -->
  43. <button type="button" disabled onclick="showPsw(this,this.form)">
  44. 显示
  45. </button>
  46. </div>
  47. <!-- input.type = number数值类控件 -->
  48. <div class="age">
  49. <label for="age">年龄:</label>
  50. <input
  51. type="number"
  52. name="age"
  53. id="age"
  54. value="20"
  55. min="20"
  56. max="70"
  57. step="2"
  58. />
  59. </div>
  60. <!-- input.type = date日期控件 -->
  61. <div class="birthday">
  62. <label for="birthday">生日:</label>
  63. <input
  64. type="date"
  65. name="birthday"
  66. id="birthday"
  67. value="2000-01-01"
  68. min="1949-10-1"
  69. max="2001-0=12-31"
  70. />
  71. <input type="month" name="" id="" />
  72. <input type="week" />
  73. <input type="time" />
  74. <input type="datetime-local" />
  75. </div>
  76. <!-- input.type = color拾色器 -->
  77. <div class="color">
  78. <label for="color">背景:</label>
  79. <input
  80. type="color"
  81. name="bgcolor"
  82. id="color"
  83. value="#ffff00"
  84. onchange="setBgColor(this,this.form)"
  85. />
  86. </div>
  87. <div class="search">
  88. <label for="search">搜索:</label>
  89. <input
  90. type="search"
  91. name="keywords"
  92. id="search"
  93. placeholder="输入关键字"
  94. />
  95. </div>
  96. <!-- input.type = file 文件上传 控件 -->
  97. <div class="upload">
  98. <label for="upload">头像:</label>
  99. <input
  100. type="file"
  101. name="user_pic"
  102. id="upload"
  103. accept="image/jpeg,image/png"
  104. />
  105. <button type="button" onclick="fileUploads(this.form)">上传</button>
  106. </div>
  107. <!-- input.type = radio 单选按钮 控件 -->
  108. <div class="gender">
  109. <!-- 推荐与默认值的input.id绑定 ,如果操作中忘记默认值,单击性别即可还原默认值-->
  110. <label for="secret">性别:</label>
  111. <!-- name="male",将这个键值对,做为变量与值,提交到后端脚本中处理 -->
  112. <!-- name: 必须相同,以保住唯一性 -->
  113. <input type="radio" name="gender" value="male" id="male" /><label
  114. for="male"
  115. ></label
  116. >
  117. <input type="radio" name="gender" value="female" id="female" /><label
  118. for="female"
  119. ></label
  120. >
  121. <input type="radio" name="gender" value="secret" id="secret" /><label
  122. for="secret"
  123. >保密</label
  124. >
  125. </div>
  126. <!-- input.type = checkbox 复选框 控件 -->
  127. <div class="hibby">
  128. <label>爱好:</label>
  129. <!--
  130. * 1. name: hobby[], 数组的语法形式,用于保存一个或多个值,这样后端处理脚本就可以获取到多个值
  131. * 2. input.value <=> input.id <=> label.for,其实只需要input.id <==> label.for
  132. * 3. checked: 默认选项
  133. -->
  134. <input type="checkbox" name="hib[]" value="game" id="game" checked />
  135. <label for="game">游戏</label>
  136. <input type="checkbox" name="hib[]" value="read book" id="read book" />
  137. <label for="read book">阅读</label>
  138. <input type="checkbox" name="hib[]" value="football" id="football" />
  139. <label for="football">足球</label>
  140. <input type="checkbox" name="hib[]" value="trave" id="trave" />
  141. <label for="trave">旅游</label>
  142. </div>
  143. <!-- `select.name+option.value`: 下拉列表框 控件 -->
  144. <div class="edu">
  145. <label for="edu">学历:</label>
  146. <!--
  147. * 1. name与value: 名值,分布在二个标签中,select.name , option.value
  148. * 2. selected: 默认选择
  149. * 3. 选择过多,且有规律,建议分组展示: optgroup
  150. * 4. 为select加提示: selected + disabled, 加到第一项之前
  151. * 5. multiple: 支持多选
  152. -->
  153. <!-- 下拉列表框, 将键与值所在的标签进行分离 -->
  154. <!-- select.name = select>option.value -->
  155. <!-- select.form="指向当前表单元素" -->
  156. <select name="edu" id="edu" form="">
  157. <!-- <select name="edu" id="edu" multiple> -->
  158. <!-- select 标签不能加提示, 想加怎么办 -->
  159. <!-- 加提示 -->
  160. <option value="" selected disabled>--请选择--</option>
  161. <option value="0">文盲</option>
  162. <!-- 下拉选项分组: 同类组合在一起 -->
  163. <optgroup label="义务教育">
  164. <option value="1">小学</option>
  165. <option value="2">中学</option>
  166. <option value="3">高中</option>
  167. </optgroup>
  168. <optgroup label="高等教育">
  169. <option value="4">专科</option>
  170. <option value="5">本科</option>
  171. <option value="6">硕士</option>
  172. <option value="7">博士</option>
  173. </optgroup>
  174. </select>
  175. </div>
  176. <!-- 预定义列表框 -->
  177. <div class="like">
  178. <label for="keyword">语言: </label>
  179. <input type="search" name="language" list="details" id="keyword" />
  180. <!-- 预置值列表 -->
  181. <!-- ? input.list <==> datalist.id 进行绑定 -->
  182. <datalist id="details">
  183. <option value="html">html</option>
  184. <option value="css">css</option>
  185. <option value="js">js</option>
  186. <option value="php">php</option>
  187. <option value="vue">vue</option>
  188. <option value="node">node</option>
  189. </datalist>
  190. </div>
  191. <!-- 文本框: 多行文本框 -->
  192. <div>
  193. <label for="comment">备注:</label>
  194. <!-- ? textarea: 没有 value 属性,它的值位于textarea标签之间 -->
  195. <!-- ? maxlength: 最大长度 -->
  196. <textarea
  197. name="comment"
  198. id="comment"
  199. cols="30"
  200. rows="5"
  201. maxlength="200"
  202. style="resize: none"
  203. >
  204. Hello world
  205. </textarea
  206. >
  207. </div>
  208. <button>提交注册</button>
  209. </fieldset>
  210. </form>
  211. <!-- 密码显示与隐藏脚本 -->
  212. <script>
  213. function showPsw(ele, form) {
  214. const psw = form.password;
  215. if (psw.type === "password") {
  216. psw.type = "text";
  217. ele.textContent = "隐藏";
  218. } else if (psw.type === "text") {
  219. psw.type = "password";
  220. ele.textContent = "显示";
  221. } else {
  222. return false;
  223. }
  224. }
  225. // 设置表单背景
  226. function setBgColor(ele, form) {
  227. form.firstElementChild.style.backgroundColor = ele.value;
  228. }
  229. // 文件上传
  230. function fileUploads(form) {
  231. let tips = "";
  232. if (form.user_pic.value.length === 0) {
  233. tips += "文件不能为空";
  234. } else {
  235. tips += "上传成功";
  236. }
  237. alert(tips);
  238. }
  239. </script>

最后的效果如图
显示的结果
结果
2023-1-16

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议