我有一组相互“堆叠”的输入字段。
<!-- This controls which data set you're looking at -->
<select class="EditorInput" id="Selector" name="Selector">
<option value="0">Link a new vendor</option>
<option value="1">The ACME Company</option>
<option value="2">Widgets Unlimited</option>
</select>
<!-- These values change based on the selection above -->
<input type="text" name="Price" />
<input type="text" name="SKU" />
<input type="text" name="Field3" />
<input type="text" name="Field4" />
<input type="text" name="Field5" />
<input type="text" name="Field6" />
<input type="text" name="Field7" />
<input type="text" name="Field8" />
一次只显示一组,但所有组的值都保存在浏览器中,直到提交。当您在下拉列表中进行选择时,组中的所有输入字段都会更改以向用户显示与选择相关的值。例如,在选择字段中选择“The ACME Company”,将使 The ACME Company 的价格显示在 price 字段中,The ACME Company 的 SKU 显示在 SKU 字段中等。
所有数据和所有更改都存储在客户端。保存数据时(通过 AJAX),每组的所有值同时保存到服务器。
由于提交是通过 AJAX 进行的,因此所有值不一定都必须存储在输入元素中。
我可以想到两种主要方法来做到这一点:
方法一
一组输入元素,数据存储在 javascript 对象中。在更改选择时,会从 javascript 变量中读取正确的数据并插入到字段中。用户对第一组所做的任何更改都会首先保存到变量中。选择添加新集会将当前值保存到变量中,然后清除表单中的值。
方法二
每个选项都有一整套输入字段。隐藏非活动输入集。更改选择显示/隐藏正确的设置。添加新集合复制现有集合之一,将新输入元素插入 dom 并清除这些新输入元素的值。
方法三
使用 HTML 5 数据存储多个值,例如:
<input type="text" name="Field8" value="$7.95" data-value-vendor-1="$6.99" data-value-vendor-2="$2.65" data-value-vendor-3="$12.24"/>
然后使用 javascript 将值切换到“存储”和“存储”中。
哪个选项更有意义?或者,还有更好的方法?此外,对于方法 1,每个集合的值将存储在哪里?在选择选项上?