「这是我参与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 本身,我们在下一篇继续来看其他的表单元素。