如何为表单提交命名多个选择

How to name multiple selects for form submit

当我有多个 select 且 multiple 设置为 true 时,如何在我的表单中命名我的 select。

举个例子:

<form action="/product/create" method="post">   
<table>
    <tr>
        <td>
            <input type="text" name="product[name]">
        </td>
        <td>
            <select name="product[taxes]" multiple>
                <option value="1">Tax A</option>
                <option value="2">Tax B</option>
                <option value="3">Tax C</option>
            </select>
        </td>
        <td>
            <input type="text" name="product[price]">
        </td>
    </tr>
    <tr>
        <td>
            <input type="text" name="product[name]">
        </td>
        <td>
            <select name="product[taxes]" multiple>
                <option value="1">Tax A</option>
                <option value="2">Tax B</option>
                <option value="3">Tax C</option>
            </select>
        </td>
        <td>
            <input type="text" name="product[price]">
        </td>
    </tr>
    <tr>
        <td>
            <input type="text" name="product[name]">
        </td>
        <td>
            <select name="product[taxes]" multiple>
                <option value="1">Tax A</option>
                <option value="2">Tax B</option>
                <option value="3">Tax C</option>
            </select>
        </td>
        <td>
            <input type="text" name="product[price]">
        </td>
    </tr>
</table>

现在,如果我 select 对每个产品征收多项税。我怎么知道每一行的哪些税是 selected,因为所有 selected 的项目都将合并到一个数组中。

这是 post 的主体,我会得到:

{
    'product[name]': [ 'test1', 'test2', 'test3' ],
    'product[taxes]': [ '1', '2', '1', '3', '2' ],
    'product[price]': [ '1', '2', '3' ] 
}

由于多个select可以发送0–n个结果,所以没有办法根据值的位置来区分同名的多个控件在数据中。

您需要向名称或所有值添加一些标识标记。

name="rowId-product[name]"

… 可能是最简单的。 (其中 rowId 是添加到其中每个控件名称之前的行的标识符)。