下面正文:
最近经常在群里看到诸如以下这些问题:
怎么按键盘的Enter
键提交表单呢?
移动端怎么聚焦时让键盘变成数字键呢?
移动端如何绑定键盘右下角【提交按钮】事件?
移动端键盘右下角【提交】如果换成【搜索】呢?
针对这些问题分享下我对使用表单的一些建议。
<ul> <li> <span>用户名:</span> <input type="text" name="username"> </li> <li> <span>密码:</span> <input type="password" name="password"> </li> <li> <span>搜索词:</span> <input type="text" name="key"> </li> <li> <span>手机号:</span> <input type="text" name="tel"> </li> <li> <span>年龄:</span> <input type="text" name="age"> </li> <li> <span>自我介绍:</span> <textarea name="content"></textarea>
</li> <li style="padding-left: 70px"> <input type="button" value="保存" id="J-save"> </li>
</ul>
<script> $("#J-save").on("click", function () { // 验证信息 // 异步 or 同步提交 alert("保存中"); });</script>
以上代码是常见的表单元素的结构,一般是绑定提交
按钮的click
事件,然后处理验证用户输入的信息,符合条件后用ajax
异步或者某种方式跳转。
也有些fe会套一层form
标签,但还是绑定的click
事件。
针对以上的表单元素优化点如下:
只要是表单元素始终在元素外层包裹form
标签,说好的我们一起手拉手语义化呢?
不单独的对【提交】按钮绑定click
事件,对整个表单绑定submit
提交事件,这样可以让整个表单内的文本框获得Enter
提交的VIP待遇,并且在移动端中可以让文本框聚焦时键盘的右下角是【前往】。
再加上对表单里元素值的验证+聚焦,可以达到【输入->回车->错误->输入->回车->提交】一气呵成的体验。
这个可以解决上面的问题1、问题3
input
元素的type
属性决定着她的功能,应该根据自己的业务场景合理的使用她。
当然还有一些date
、time
等,但要考虑到兼容性,也视项目情况而定。placeholder占位当然还有一些date
、time
等,但要考虑到兼容性,也视项目情况而定。
合理的使用placeholder
占位,但要考虑兼容性。兼容方案:
使用value
模拟需要注意提交时判断value
是否是默认占位的值,比较坑
使用span
标签定位显示,需要考虑到直接设置元素值时的触发情况
如果已知元素理想的输入长度,不妨设置下元素的最大长度属性,并且兼容性很好哦。从一定程度上避免了用户的误输入,从而提升用户体验。
表单元素的描述文字应该使用label
标签包裹,并且使用for
属性指向表单元素,从而达到点击描述文字可以聚焦文本框的效果,如:
在文本框聚焦时理论来说应该让用户感知出来,而不是纹丝不动。
聚焦时考虑页面滚动到焦点元素的最佳可视范围。
你还需要考虑在移动端中聚焦时页面老跑偏...
当表单异步提交过程中需要向后端发送数据,可能会经历 提交中、提交出错、提交成功 的状态,还要考虑到提交中再次提交(重复提交)的问题。
比如在提交时设置提交按钮的disabled = true
,并且使其变灰,显示【提交中...】是不是更友好些呢?手拉手的问题我就不再说了...
考虑到用户网络慢,在用户没有加载完成js时提交了表单
后端原生支持 - 后端即使纯form提交也可以正常的接收
默认阻止 - 在form
标签默认阻止onsubmit="return false"
,js初始化时处理掉
autocomplete - 根据业务场景判断是否使用自助补全功能,可以在整个表单form
添加,也可以在input
元素添加
移动端文本聚焦时fixed
失效
表单中重置按钮
由于公众号不带链接,大家可以通过左下方“阅读原文”来进行上面这些文章的拓展阅读。
简单的写了个demo: https://github.xuexb.com/demo/form/new.html
好了,本期文章就到此了,有没给你带来一些帮助和启发呢?下期见!~