重学 HTML —— 表单(一)

160 阅读2分钟

「这是我参与2022首次更文挑战的第11天,活动详情查看:2022首次更文挑战

上一节介绍完了 table,这一节开始学习 form,与不常用的 th、td 不同,form 下面的一系列表单组件有很多我们都很熟悉,它们是收集用户输入的重要手段,在 form 之外也有广泛应用,本篇内容来系统地看一下这部分内容。

form

首先我们来看 form 标签,form 是整个表单外层的容器,用来承载向服务器做提交的操作行为,我们可以通过提交 form 来直接向后端发起请求。我们现在更多时候会选择手动调用 ajax 相关 API 来进行数据提交,不过在 ajax 流行之前,直接使用 form 是最直接的提交数据的方式,form 上面可以设置一些相关属性。

最重要的属性是 action,它的值为 url,表示提交请求的目标服务器地址,数据会经过 http 请求发给对应的后端做处理,这里可以选择使用 get 或 post 请求,使用 method 可以设置请求方式。除了 get 和 post,method 还有一个值为 dialog,这个在前面 dialog 元素时介绍过。

对于 post 请求可以设置 enctype 指定 mime 类型,这里提交的 mime 分为三种:

  • application/x-www-form-urlencoded:未指定属性时的默认值。
  • multipart/form-data:当表单包含 type=file 的 <input> 元素时使用此值。
  • text/plain:出现于 HTML5,用于调试。

其他属性 novalidate 免校验,target 指定结果位置等就比较简单了。

除了与表单提交相关的属性外还有一些基础属性,需要关注的 autocomplete,设置是否启用浏览器自动补全。

还有一个非标准的 IOS 专用属性 autocapitalize,这个属性用来指定首字母大写的策略:

  • none:完全禁用自动首字母大写。
  • sentences:自动对每句话首字母大写。
  • words:自动对每个单词首字母大写。
  • characters:自动大写所有的字母。

以上就是 form 标签本身的一些能力,由于 form 提交控制权在后端,在现代的 CSR 前端项目中几乎不会用到,我们会使用 ajax 的方式手动发送网络请求。不过在 SSR 的一些场景下可能还有用。前段时间 react-router 团队开源了一个全栈开发框架 remix,这个框架对 form 的支持程度很高,感兴趣可以去了解相关实现。

除了 form 本身,和 form 相关的 html 元素还有很多,本片就只介绍 form 本身,我们在下一篇继续来看其他的表单元素。