多个表单提交无法正常工作

时间:2016-10-21 06:41:57

标签: jquery forms

我尝试使用一个提交按钮添加产品​​到订单购物车。

表格的例子(其他表格相同,不同之处在于表格的身份):

<form action="/products" method="post" id="basic-cart-add-to-cart-quantity-form-37" accept-charset="UTF-8">
  <div>
    <input type="hidden" name="nid" value="37">
    <div class="form-item form-type-textfield form-item-quantity">
      <input type="text" id="edit-quantity" name="quantity" value="0" size="5" maxlength="128" class="form-text" style="border-color: rgb(189, 159, 87);">
    </div>        
  </div>
</form>
...
<div class="button basic-cart-add-to-cart-link">Add to cart</div>

因此,页面上可以有不同数量的表单。我选择了一个产品,在输入中输入数量,之后我使用&#34提交所有表格;添加到购物车&#34;按钮。

我尝试过几次提交6种表格(产品),但每次都添加了5种产品(但不是6种)。

$(function(){
  $('.basic-cart-add-to-cart-link').click(function(){
    var speed = 1250;
    for(var i = 1; i <= idArr.length; i++) {
      setTimeout(function(y) {
        var formId = 'form#basic-cart-add-to-cart-quantity-form-' + y;
        var selector = formId + ' ' +'input[name="quantity"]';
        var q = parseInt($(selector).val());
        if(q > 0) {
          saveSelectorInStorage(selector);
          $(formId).submit();
        }
      }, speed*i, idArr[i-1]);
    }
  });
});

idArr - 表格数量已更改的数组。如果id="basic-cart-add-to-cart-quantity-form-37",在idArr我放了37.我检查idArr并且我有正确的ID。如何解决?

1 个答案:

答案 0 :(得分:1)

您目前无法提交多个表单,因为浏览器会取消除最后一个表单提交套接字以外的所有表单。

使用索引输入代替使用多个表单:

<div>
    <input type="hidden" name="Product[0]nid" value="37">
    <div class="form-item form-type-textfield form-item-quantity">
        <input type="text" name="Product[0]quantity" value="0" class="form-text">
    </div>        
</div>

<div>
    <input type="hidden" name="Product[1]nid" value="39">
    <div class="form-item form-type-textfield form-item-quantity">
        <input type="text" name="Product[1]quantity" value="1" class="form-text">
    </div>        
</div>

在PHP方面,您将收到如下表单数据:

var_dump($_POST);

[
    'Product' => [
        [
            'nid' => '37',
            'quantity' => '0',
        ],
        [
            'nid' => '39',
            'quantity' => '1',
        ],
    ]
];