【发布时间】:2019-01-28 00:59:53
【问题描述】:
我正在使用progress 元素制作一个进度条,该元素会随着用户填写冗长表单中的字段而增加。我发现this SO thread 有助于使用data-* 属性获得一些基线功能,但我的表单具有“保存进度”功能,可以将任何输入的字段信息保存到浏览器的本地存储中,以便稍后检索。因此,如果用户返回带有已保存数据的表单,我希望该栏反映该进度。
以下是目前的工作方式——使用数据属性data-prog 的表单字段示例标记:
<!-- FORM - SAMPLE FIELD -->
<div id="form">
<div class="field-group required">
<label for="mgd_org_name">Organization Name:</label>
<div>
<input id="mgd_org_name" type="text" name="mgd_org_name" placeholder="Please enter your organization's name" required data-prog="6">
</div>
</div>
</form>
<!-- Progress bar -->
<div id="form-progress">
<p>Form Progress</p>
<progress max="100" value="0" id="progress"></progress>
</div>
到目前为止的 jQuery:
$(function() {
// get all form inputs w/ data-prog values
var inputs = $('#dossier-form').find('input[data-prog], textarea[data-prog]');
var progBar = $('#progress');
var progVal = 0;
$(inputs).change(function() {
if ($(this).val().length > 0) {
progVal += $(this).data('prog');
progBar.attr('value', progVal);
}
});
});
这样,每个字段都有一个data-prog 值,该值将添加到progVal 并反映在进度条级别中。我遇到的问题是为任何可能已经在加载时填写的表单字段加载 initial 值 - 因此,我需要找到所有输入值的字段,添加关联的 @ 987654329@ 值,并最初将该值加载到进度条中。如果字段被清除,我还想相应地减少进度值。
对于初始加载,我一直在尝试类似以下的方法(不起作用):
var inputsSaved = $(inputs).val();
if($(inputsSaved).length > 0) {
progVal = $(inputs).data('prog');
console.log('has existing progress');
} else {
progVal = 0;
console.log('does not have existing progress');
}
我不太确定如何找到在加载时输入文本的字段并获取相关的 prog 值,也不确定如何在清除字段时相应地减小值。非常感谢这里的任何帮助!
【问题讨论】:
-
这是一项不平凡的任务。为什么不接受一个虚假的进步,或者一个不确定的进步呢?
-
@IvanRubinson 你能详细说明你所说的虚假/无限进展是什么意思吗?另外,有没有办法查看哪些字段在加载时输入了数据,并将各自的
data-prog值相加?这是我最关心的部分。 -
1) 除非您真的想为每个输入分配不同的进度百分比...为什么不只计算填充的数量除以总数? 2) 然后localStorage可以用来填充之前输入的值...当然。
-
@LouysPatriceBessette 您介意发布一个显示该解决方案的答案吗?这个想法是为需要更多努力的问题分配更高的价值,但我可能会放弃这种方法并尝试你的建议。
-
好的,我了解了“努力”方面......我有一个想法可以让你保留它。给我几分钟。
标签: javascript jquery forms user-interface progress-bar