在表单数组中发布所有复选框

时间:2015-08-11 11:28:13

标签: php jquery ajax laravel checkbox

我有一个看起来像这样的表格:

else

这些输入动态地(使用Jquery)作为行添加,并且可以有一个或者可以有10个,20个你命名它。

问题是当我将这些提交给php时,我无法知道哪些行有"发票"和#34; D.note"选中或取消选中复选框,因为我收到的数组看起来像这样

<div class="row calc">
<div class="large 12 columns">
        <div class="large-1 columns">
        <label>Quantity</label>
        <input name="units[]" type="text" value="1">
    </div>
    <div class="large-1 columns">
        <label>GroupNR</label>
        <input name="article_group[]" type="text" value="2401">
    </div>
    <div class="large-2 columns">
        <label>Item name</label>
        <input name="article[]" type="text" value="Item 1">
    </div>
    <div class="large-3 columns">
        <label>Description</label>
        <input name="description_en[]" type="text" value="Description 1">
    </div>
    <div class="large-1 columns">
        <label>Price/Unit</label>
        <input name="unit_price[]" type="text" value="15500">
    </div>
    <div class="large-1 columns">
        <label>Discount</label>
        <input max="100" min="0" name="discount[]" type="number" value="0">
    </div>
    <div class="large-1 columns">
        <label>Invoice</label>
        <input checked="checked" name="invoice[]" type="checkbox">
    </div>
    <div class="large-1 columns">
        <label>D. Note</label>
        <input checked="checked" name="delivery_note[]" type="checkbox">
    </div>
    <div class="large-1 columns">
        <label>Delete</label>
        <a class="alert button tiny" onclick="$(this).closest('.calc').remove(); $( '#itemForm' ).trigger('change');">X</a>
    </div>

</div>

但实际上,这是排&#34; 0&#34;和&#34; 2&#34;检查,并排#&#34; 1&#34;未选中状态。

这就是我在php / laravel

中迭代它的方法
 array:13 [▼
  "units" => array:3 [▼
    0 => "1"
    1 => "1"
    2 => "1"
  ]
  "article_group" => array:3 [▼
    0 => "2401"
    1 => "2201"
    2 => "2503"
  ]
  "article" => array:3 [▶]
  "description_en" => array:3 [▶]
  "unit_price" => array:3 [▶]
  "discount" => array:3 [▶]
  "invoice" => array:2 [▼
    0 => "on"
    1 => "on"
  ]
  "delivery_note" => array:2 [▼
    0 => "on"
    1 => "on"
  ]
]

那么还有办法提交未经检查的盒子吗? 有一个同名的隐藏输入不会工作,因为我使用没有设置索引的数组,也许我可以让我的ajax调用发送一个数字索引数组,但必须有一个更容易的解决方案

或者是否有人建议另一种解决方案?

问候约翰

2 个答案:

答案 0 :(得分:1)

我看到了使用JavaScript解决这个问题的一些可能性:

  • 要么不是使用name="delivery_note[]",而是创建枚举:name="delivery_note_1"(在PHP代码中,循环直到它们不存在)
  • 或@billyonecan建议name="delivery_note[1]" (提问者使用的解决方案)
  • onsubmit (JS事件,你可以使用jquery轻松捕获)你做了一些处理,在复选框数组中插入未选中复选框的其他(默认)值

答案 1 :(得分:0)

您可以为每个复选框指定唯一值。然后,您可以使用该值来标识复选框

检查器:

<?php

        foreach($_POST['check'] as $k){

            // Value of checkbox that are checked
            echo $k; 
        }
    ?>

形式:

<form method='POST'>
    <input type='checkbox' name='check[]' value='1'>
    <input type='checkbox' name='check[]' value='2'>
    <input type='checkbox' name='check[]' value='3'>
    <input type='checkbox' name='check[]' value='4'>
</form>