对于多步骤表单,计划包括跨步骤逻辑地组织问题,对相似的问题进行分组,并尽量减少步骤的数量和每个步骤所需的信息量。任何能让每一步都有重点且易于管理的东西,都应该是你的目标。
在本教程中,我们将为工作申请创建一个多步骤表单。以下是我们在每个步骤中将要求申请人提供的详细信息:
- 个人信息
收集申请人的姓名、电子邮件和电话号码。 - 工作经验
收集申请人最近的公司、职位和工作年限。 - 技能与资历
申请人列出他们的技能并选择他们的最高学位。 - 审核与提交
这一步不会收集任何信息。相反,它为申请人提供了一个机会,可以在提交表单之前返回并查看在表单的前面步骤中输入的信息。
你可以把这些问题想象成一种了解某人的数字化方式。你不可能在第一次见到某人时不先问他们的名字就询问他们的工作经历。
根据上面的步骤,这就是我们的HTML正文和表单应该是什么样子的。首先,主元素form
:
Step 1
第一步是填写个人信息,如申请人的姓名、电子邮件地址、电话号码;
Step 3
第三步是求职者列出他们所申请工作的技能和资格:
最后,我们将允许申请人在提交之前查看他们的信息:
注意:我们已经为每个 fieldset
元素添加了 hidden
属性,但第一个元素除外。这样可以确保用户只看到第一步。一旦他们完成了第一步,他们可以通过单击导航按钮在第二步中继续填写他们的工作经验。稍后我们将添加此按钮。 添加样式#
为了保持重点,我们不打算在本教程中强调样式。为了保持简单,我们将利用simple .css样式框架使表单在本教程的其余部分保持良好的形状。
如果你在跟随,我们可以包括Simple的样式在文档 head
:
然后从那里,继续创建一个 style.css
文件,我折叠了以下样式。
表单导航和验证
验证多步骤表单的用户体验的一个简单方法是,等到用户到达表单的最后一步,才让他们知道他们在此过程中犯了什么错误。在进入下一步之前,应该验证表单的每个步骤是否存在错误,并且应该显示描述性错误消息,以便用户了解错误所在以及如何修复它。
现在,表单中唯一可见的部分是第一步。要完成表单,用户需要能够导航到其他步骤。我们要用几个按钮把它拉下来。第一步将有一个Next按钮。第二步和第三步都将有一个Previous和一个Next按钮,第四步将有一个Previous和一个Submit按钮。
注意:我们已经为Previous和Next按钮添加了 onclick
属性,以将它们链接到各自的JavaScript函数: previousStep()
和 nextStep()
。
“下一步”按钮
nextStep()
函数链接到Next按钮。每当用户单击Next按钮时, nextStep()
函数将首先检查以确保用户所处的任何步骤的所有字段都已正确填写,然后再转到下一步。如果字段没有被正确填充,它会显示一些错误消息,让用户知道他们做错了什么,并通知他们做什么来消除错误。
在我们进入 nextStep
函数的实现之前,我们需要定义一些变量,因为它们将在函数中使用。首先,我们需要DOM中的输入字段,这样我们就可以对它们进行检查,以确保它们是有效的。
然后,我们需要一个数组来存储错误消息。
此外,我们还需要在DOM中添加一个元素,以便在生成错误消息后插入这些消息。这个元素应该放在HTML中最后一个 fieldset
结束标签的下面:
将上面的 div
添加到JavaScript代码中,使用以下行:
最后,我们需要一个变量来记录当前的步长。
let currentStep = 1;
现在我们已经把所有的变量都准备好了,下面是 nextstep()
函数的实现:
在按下Next按钮的那一刻,我们的代码首先检查用户当前所处的步骤,并根据这些信息,通过调用 addValidationErrors()
函数来验证该特定步骤的数据。如果有错误,我们显示它们。然后,表单调用 validateStep()
函数来验证在进入下一步之前没有错误。如果有错误,它将阻止用户继续进行下一步。
每当 nextStep()
函数运行时,错误消息首先被清除,以避免在 addValidationErrors
函数运行时将来自不同步骤的错误追加到现有错误或重新添加现有错误消息。 addValidationErrors
函数使用该步骤的字段作为参数对每个步骤调用。
下面是 addValidationErrors
函数的实现:
下面是 validateStep()
函数的定义:
validateStep()
函数检查错误。如果没有,则在 showStep()
函数的帮助下进行下一步。
showStep()
函数需要DOM中的四个字段集。将以下行添加到JavaScript代码的顶部以使字段集可用:
showStep()
函数的作用是遍历表单中的所有 fieldsets
并隐藏任何 fieldset
不等于我们要导航到的那个。然后,它更新 currentStep
变量,使其等于我们要导航到的步骤。
“上一页”按钮
previousStep()
函数链接到上一页按钮。每当单击上一个按钮时,与 nextStep
函数类似,错误消息也从页面中清除,并且导航也由 showStep
函数处理。
每当 showStep()
函数被调用时,以“ currentStep - 1
”作为参数(就像在这个例子中一样),我们回到上一步,而通过调用 showStep()
函数,以“ currentStep + 1
”作为参数(就像在 validateStep()
函数的情况下)来移动到下一步。
利用视觉提示改善用户体验
另一种改善多步骤表单用户体验的方法是整合视觉线索,这些线索会给用户提供他们所处过程的反馈。这些东西可以包括进度指示器或步进器,以帮助用户知道他们所处的确切步骤。
对A步进#积分
要将步进器集成到表单中(类似于Material Design中的步进器),我们需要做的第一件事是将它添加到HTML中,就在 <form>
标签下方。
接下来,我们需要查询表示当前步骤的步进部分。这是类名为 currentStep
的span标签。
现在,我们需要在单击previous或next按钮时更新步进值。为此,我们需要更新 showStep()
函数,向其添加以下行:
这一行被添加到 showStep()
函数中,因为 showStep()
函数负责在步骤之间导航并更新 currentStep
变量。因此,每当 currentStep
变量更新时,currentStepDiv也应该更新以反映该更改。
存储和检索用户数据#
改善表单用户体验的一个主要方法是将用户数据存储在浏览器中。多步骤表单通常很长,需要用户输入大量关于自己的信息。想象一下,用户填写了95%的表单,然后不小心按下了键盘上的F5按钮,失去了所有的进度。这对用户来说将是一个非常糟糕的体验。
使用 localStorage
,我们可以在输入用户信息后立即存储用户信息,并在加载DOM内容后立即检索用户信息,这样用户就可以从他们离开的任何地方继续填写表单。要将这个特性添加到表单中,我们可以在输入用户信息后立即保存它。这可以使用 input
事件来实现。
在添加 input
事件监听器之前,先从DOM中获取form元素:
Now we can add the input
event listener:现在我们可以添加 input
事件监听器:
接下来,我们需要添加一些代码来帮助我们在加载DOM内容后检索用户数据。
最后,最好在不再需要的时候从 localStorage
中删除数据:
将当前步长值添加到 localStorage
#
如果用户不小心关闭了浏览器,他们应该能够回到他们离开的地方。这意味着当前步长值也必须保存在 localStorage
中。
为了保存该值,将以下行添加到 showStep()
函数中:
现在我们可以检索当前步长值,并在加载DOM内容时将用户返回到他们离开的位置。在 DOMContentLoaded
处理程序中添加以下代码:
此外,不要忘记在提交表单时清除 localStorage
中的当前步长值。
上面这行应该添加到提交处理程序中。
总结#
创建多步骤表单有助于改善复杂数据输入的用户体验。通过仔细规划步骤,在每个步骤中实现表单验证,并将用户数据临时存储在浏览器中,可以使用户更容易完成长表单。