我有一个表单,可以在用户输入数据时进行实时计算。但是,某些计算要求首先填写某些字段。
例如,如果我有4个字段,而字段4是字段1的百分比,我必须确保用户具有字段1的值,然后才能将数据输入字段4。
我想到的是给每个字段一个带有序号的数据步骤属性。首次出现表单时,除第一个字段外,所有字段都被禁用。当有效数据输入第一个字段时,将启用下一步的字段。这也假设如果用户然后清空字段1,则其余字段将被消隐并再次禁用。
我很确定这个解决方案可行,但需要大量的JS代码(jQuery)才能确保它正常工作,以及服务器端验证。但是我有点困惑的一个“问题”是,如果你做提交并且服务器端验证失败并且你再次渲染表单,如何维护表单字段的禁用/启用状态?但我想我会在当前问题之后处理这个问题。
所以问题是,这是否必须按顺序填写表格问题?有没有其他人找到比我计划实施的更好的解决方案或更优雅的方法?通用概念或想法我很好;我可以编写任何我需要的代码,我只是不确定这个特定问题的最佳实践。
答案 0 :(得分:1)
你建议的是这样做的好方法。 JS代码不会那么大。您可以在字段上使用类名来确定哪个是活动的。您始终可以传回一些JS变量或隐藏字段,以告知在服务器端验证后处于活动状态的页面。
答案 1 :(得分:1)
您似乎不需要检查订单,而是需要排除表单填写错误的情况(例如,字段4已填充,而字段1未填写)。
我建议您允许用户输入他们想要的任何内容,但要突出显示必填字段,只要它们是空的,并防止表单提交,直到一切正确。
答案 2 :(得分:0)
为什么不在客户端验证值?过程就像你想的那样。将onchange
事件处理程序设置为您的输入,并在处理程序中验证该值。如果正确,启用下一个输入,如果不正确,则显示目前的残疾。只需要几行脚本。
答案 3 :(得分:-2)
String inputString="1+3+5";
return
// split input and create stream
Stream.of(inputString.split("\\+"))
// convert each item to Integer
.mapToInt(Integer::parseInt)
// sum up everything
.sum();