博客列表 >表单: 前后端数据交互的接口

表单: 前后端数据交互的接口

Stonegarlic
Stonegarlic原创
2022年10月20日 19:07:51532浏览

开学第四课

预览效果

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>表单: 前后端数据交互的接口-2</title>
  8. </head>
  9. <body>
  10. <h2>用户注册表</h2>
  11. <!--
  12. * 1. action: 服务器上的表单处理脚本,如`login.php`
  13. * 2. method: 提交方式
  14. * 2.1 GET: 默认,数据在URL中,适用于"少量且公开"的数据,如分页,查询参数
  15. * http://127.0.0.1:5500/1017/register.php?username=admin
  16. * http://127.0.0.1:5500/1017/register.php?username=peter+zhu
  17. * 2.2 POST: 数据在请求体中,适合于"大量的或隐私"的数据
  18. * 3. enctype:
  19. * 3.1 application/x-www-form-urlencoded: 默认对值对的编码方案
  20. * 3.2 multipart/form-data: 分块,原始数据,适用文件上传
  21. * 4. target: 与<a>相同,_self是默认,_blank新页面
  22. * 5. id: name现在已废弃不推荐,全用id来引用该表单
  23. * 6. onsubmit: 事件属性, 提交时执行的js,拦截提交操作,执行用户自定义提交行为
  24. -->
  25. <form action="register.php" method="POST" enctype="multipart/form-data" target="_blank" id="register">
  26. <fieldset>
  27. <legend>基本信息</legend>
  28. <div class="username">
  29. <label for="uname">用户名:</label>
  30. <input type="text" name="username" id="uname" name="username" value="" placeholder="用户名不少于6位">
  31. </div>
  32. <div class="password">
  33. <label for="password">用户密码:</label>
  34. <input type="password" name="password" id="password" value="" placeholder="不少于6位" required>
  35. <button type="button" onclick="this.previousElementSibling.type='text'">显示密码</button>
  36. </div>
  37. <div class="email">
  38. <label for="email">用户邮箱:</label>
  39. <input type="email" name="email" id="email" value="" placeholder="user@email.com">
  40. </div>
  41. <div class="age">
  42. <!--
  43. * 1. min: 最小值
  44. * 2. max: 最大值
  45. * 3. step: 步长,递增/递减的量
  46. -->
  47. <label for="age">年龄:</label>
  48. <input type="number" name="age" id="age" value="" min="18" max="80" step="10">
  49. </div>
  50. <div class="birthday">
  51. <label for="birthday">生日</label>
  52. <input type="date" name="birthday" id="birthday" value="" min="1949-10-01" max="2000-01-01">
  53. </div>
  54. <div class="blog">
  55. <label for="blog">Blog:</label>
  56. <input type="url" name="blog" placeholder="http://" />
  57. </div>
  58. <div class="color">
  59. <label for="color">拾色器:</label>
  60. <input type="color" name="color" value="#FFFF00" id="color" onchange="getColor(this)" />
  61. <output>#FFFF00</output>
  62. </div>
  63. <div class="search">
  64. <label for="query">搜索:</label>
  65. <input type="search" name="search" id="query" placeholder="输入关键字" />
  66. <button type="button">查询</button>
  67. </div>
  68. </fieldset>
  69. <fieldset>
  70. <legend>其他信息</legend>
  71. <div class="upload">
  72. <label for="upload">头像:</label>
  73. <!-- ! 文件上传,必须将 form.enctype="multipart/form-data",method="POST" -->
  74. <input type="file" name="user_pic" id="upload" />
  75. <button type="button">上传</button>
  76. </div>
  77. <!-- ? type="hidden" 隐藏域,页面不可见,但是数据可以正常提交到服务器中-->
  78. <input type="hidden" name="uid" value="10102" />
  79. <div class="range">
  80. <label for="range">星级:</label>
  81. <input type="range" name="range" id="range" min="0" max="5" value="0" step="1" oninput="getStatus(this)" />
  82. <output>0</output>
  83. </div>
  84. <!-- ? 进度条,是标签 -->
  85. <div class="progrss">
  86. <label>进度:</labe>
  87. <!-- min 不要给 -->
  88. <progress name="progress" max="100" value="10"></progress>
  89. <output>10%</output>
  90. <button type="button" onclick="handle(this)">+1</button>
  91. </div>
  92. </fieldset>
  93. <fieldset>
  94. <legend>预置内容</legend>
  95. <!-- 1. 用户自行输入: 具有很大的风险,需要不断的验证 -->
  96. <!-- 2. 预置内容,用户只要选择就可以: 安全性高,但是失去了灵活性 -->
  97. <!-- ? type="radio" 单选按钮-->
  98. <div class="gender">
  99. <label for="secret">性别:</label>
  100. <!--
  101. * 1. name: 必须相同,以保住唯一性
  102. * 2. input.value <=> input.id <=> label.for
  103. * 3. checked: 默认选项
  104. * 4. 总标签label.for <=> checked
  105. -->
  106. <input type="radio" name="gender" value="male" id="male"><label for="male"></label>
  107. <input type="radio" name="gender" value="female" id="female" ><label for="female"></label>
  108. <input type="radio" name="gender" value="secret" id="secret" checked><label for="secret">保密</label>
  109. </div>
  110. <!-- ? type="checkbox" 复选框 -->
  111. <div class="hobby">
  112. <label>爱好:</label>
  113. <!--
  114. * 1. name: hobby[], 数组的语法形式,用于保存一个或多个值
  115. * 2. input.value <=> input.id <=> label.for,其实只需要input.id <==> label.for
  116. * 3. checked: 默认选项
  117. -->
  118. <input type="checkbox" name="hobby[]" value="game" id="game" checked><label for="game">游戏</label>
  119. <input type="checkbox" name="hobby[]" value="trave" id="trave"><label for="trave">旅游</label>
  120. <input type="checkbox" name="hobby[]" value="shoot" id="shoot"><label for="shoot">摄影</label>
  121. <input type="checkbox" name="hobby[]" value="program" id="program" checked><label for="program">编程</label>
  122. </div>
  123. <!-- ? select + option : 下拉列表 -->
  124. <div class="edu">
  125. <label for="edu">学历:</label>
  126. <!--
  127. * 1. name与value: 名值,分布在二个标签中,select.name , option.value
  128. * 2. selected: 默认选择
  129. * 3. 选择过多,且有规律,建议分组展示: optgroup
  130. * 4. 为select加提示: selected + disabled, 加到第一项之前
  131. * 5. multiple: 支持多选
  132. -->
  133. <!-- select.form="指向当前表单元素" -->
  134. <select name="edu" id="edu" form="">
  135. <!-- <select name="edu" id="edu" multiple> -->
  136. <!-- select 标签不能加提示, 想加怎么办 -->
  137. <!-- 加提示 -->
  138. <option value="selected disabled" >--请选择--</option>
  139. <option value="0">文盲</option>
  140. <optgroup label="义务教育">
  141. <option value="1">小学</option>
  142. <option value="2">初中</option>
  143. <option value="3">高中</option>
  144. </optgroup>
  145. <optgroup label="高等教育">
  146. <option value="4">专科</option>
  147. <option value="5">本科</option>
  148. <option value="6">硕士</option>
  149. <option value="7">博士</option>
  150. </optgroup>
  151. </select>
  152. </div>
  153. <!-- ? 自带联想提示: 预定义+自定义,即可自己输入,也能从预置中选择: input + select -->
  154. <!-- ? input + datalist + option -->
  155. <div class="like">
  156. <label for="keyword">语言: </label>
  157. <input type="search" name="language" list="details" id="keyword">
  158. <!-- 预置值列表 -->
  159. <!-- ? input.list <==> datalist.id 进行绑定 -->
  160. <datalist id="details">
  161. <option value="html">html</option>
  162. <option value="css">css</option>
  163. <option value="js">js</option>
  164. <option value="php">php</option>
  165. <option value="vue">vue</option>
  166. <option value="node">node</option>
  167. </datalist>
  168. </div>
  169. </fieldset>
  170. <div>
  171. <!-- 文本域: 多行文本框, input: 单行文本框 -->
  172. <label for="comment">个人简介:</label>
  173. <!-- ? textarea: 没有 value 属性,它的值位于textarea标签之间 -->
  174. <!-- ? maxlength: 最大长度 -->
  175. <textarea name="comment" id="comment" cols="30" rows="5" maxlength="200" style="resize: none">Hello world</textarea>
  176. </div>
  177. <!-- ? form中的button , 默认为提交 -->
  178. <button>提交</button>
  179. <!-- 等价于 -->
  180. <button type="submit">提交</button>
  181. <!-- ? type="button": 只是一个普通按钮,没有预置行为,如提交,复位 -->
  182. <button type="button">提交</button>
  183. <!--
  184. * 如果想将表单的同步提交,改为异步提交(Ajax,Fetch), 有三种方式:
  185. * 1. <button type="button">
  186. * 2. 事件方法中: event.preventDefault(), 禁用默认行为
  187. * 3. form.onsubmit = "return false", 禁用当前表单默认提交行为
  188. -->
  189. <!-- ! 每个表单控件都有一个form属性, 它永远指向当前控件所性的表单元素 -->
  190. </fieldset>
  191. </form>
  192. <script src="static/js/func.js"></script>
  193. </body>
  194. </html>
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议