动态创建和处理多个表单字段组

时间:2016-09-27 11:26:48

标签: javascript php html forms

我正在构建一个小订单页面(基于JS和PHP),而且在处理表单数据时我有点困惑。在表单中,用户应该能够订购一个或多个产品,每个产品都有单选按钮形式的一些设置。为了使每个输入字段唯一,我添加了一个小的JS片段,使每个输入名称值不同(添加新产品时),如此 -

    newUnit = newUnit.replace(/name="unitPrice/g, 'name="unitPrice' + i);
    newUnit = newUnit.replace(/name="body/g, 'name="body' + i);
    newUnit = newUnit.replace(/name="details/g, 'name="details' + i);
    newUnit = newUnit.replace(/name="topShelf/g, 'name="topShelf' + i);


<div class="unit">
    <input type="hidden" class="unitPrice" name="unitPrice" value="0" data-price="6900">
    <div class="row">
        <div class="col-sm-3">
            <fieldset class="form-group options-body">
                <legend>Body</legend>
                <div class="form-check">
                    <label class="form-check-label">
                        <input type="radio" class="form-check-input" data-price="0" name="body" value="White Ash" checked>
                        White Ash
                    </label>
                </div>
                <div class="form-check">
                    <label class="form-check-label">
                        <input type="radio" class="form-check-input" data-price="0" name="body" value="Black Ash">
                        Black Ash
                    </label>
                </div>
                <div class="form-check">
                    <label class="form-check-label">
                        <input type="radio" class="form-check-input" data-price="800" name="body" value="Walnut">
                        Walnut (+800)
                    </label>
                </div>
            </fieldset>
        </div>
    </div>
</div>
<div class="unit">
    <input type="hidden" class="unitPrice" name="unitPrice" value="0" data-price="6900">
    <div class="row">
        <div class="col-sm-3">
            <fieldset class="form-group options-body">
                <legend>Body</legend>
                <div class="form-check">
                    <label class="form-check-label">
                        <input type="radio" class="form-check-input" data-price="0" name="body2" value="White Ash" checked>
                        White Ash
                    </label>
                </div>
                <div class="form-check">
                    <label class="form-check-label">
                        <input type="radio" class="form-check-input" data-price="0" name="body2" value="Black Ash">
                        Black Ash
                    </label>
                </div>
                <div class="form-check">
                    <label class="form-check-label">
                        <input type="radio" class="form-check-input" data-price="800" name="body2" value="Walnut">
                        Walnut (+800)
                    </label>
                </div>
            </fieldset>
        </div>
    </div>
</div>

(如果用户再添加1个产品,则运行JS的部分样本标记)

这非常适合在整个订单步骤中更新价格和设置,但是当我提交数据时,我不确定如何处理不同的产品,因为我不能循环它们,因为它们有不同的名称。 我打赌有更好的方法,任何想法/方向?

表单数据的示例

unitPrice=6900&unitPrice=6900&body%5B%5D=White%20Ash&details%5B%5D=Stainless%20steel&topShelf%5B%5D=Wood&firstName=&lastName=&email=&phone=&address=&city=&zip=&country=&firstName2=&lastName2=&email2=&phone2=&address2=&city2=&zip2=&country2=&totalPrice=13800

3 个答案:

答案 0 :(得分:1)

我不打算提供完整的代码来解释如何做到,但解释已经足够了。您要做的是在提交之前修改发送到服务器的数据。您可以为每个字段创建4个数组,并在客户端使用相应的数据初始化它们(注意:也包括空值以维护顺序。)。然后将所有这些数组作为POST字段发送。这可以使用AJAX查询来处理帖子。在服务器端,您现在可以分别遍历每个阵列。这只是可以减少POST变量数量的答案之一,如果在服务器中设置了限制(可能是64并且用户CAN超出了!)。

希望这会有所帮助。如果你想要一个代码版本的评论,我会花更多的时间在它上面。

答案 1 :(得分:1)

您应该使用数组作为表单字段名称,例如unitPrice []而不是&#34;&#39; unitPrice&#39; +我&#34;你现在在做什么然后,您可以在php中迭代表单字段作为数组,例如$unitPrice = $_POST['unitPrice']将为您提供一个单位价格数组,然后您可以使用foreach进行迭代。这有意义吗?

答案 2 :(得分:0)

1)使用PHP创建字段而不是JavaScript可能更容易。

2)只需通过循环查看名称并存储它,例如到一个数组:

unitPrice = []; //create array
for($i = 0; $i < 10; $i++)
{
  array_push(unitPrice,$_GET['unitPrice'.$i]); //push value into array
}