将表单输入作为单独的数组

时间:2017-06-28 22:08:54

标签: html arrays forms

我有任意数量的'行'我需要通过表单发布的数据,以实现以下数组结构,以便impact_speed将包含x个数组,每个数组包含descriptionvalueunit元素:

array(1) {
  ["impact_speed"]=>
  array(3) {
    [0]=>
    array(3) {
      ["description"]=>
      string(3) "one"
      ["value"]=>
      string(2) "10"
      ["unit"]=>
      string(3) "mph"
    }
    [1]=>
    array(3) {
      ["description"]=>
      string(3) "two"
      ["value"]=>
      string(2) "20"
      ["unit"]=>
      string(3) "kph"
    }
    [2]=>
    array(3) {
      ["description"]=>
      string(5) "three"
      ["value"]=>
      string(2) "30"
      ["unit"]=>
      string(3) "fps"
    }
  }
}

如果行数是固定的,我可以通过索引表单输入来实现这一点:

<input type="text" name="impact_speed[0][description]" value="one">
<input type="text" name="impact_speed[0][value]" value="10">
<input type="text" name="impact_speed[0][unit]" value="mph">

<input type="text" name="impact_speed[1][description]" value="two">
<input type="text" name="impact_speed[1][value]" value="20">
<input type="text" name="impact_speed[1][unit]" value="kph">

<input type="text" name="impact_speed[2][description]" value="three">
<input type="text" name="impact_speed[2][value]" value="30">
<input type="text" name="impact_speed[2][unit]" value="fps">

但是,我使用javascript UI添加这些内容,允许用户点击加号图标来创建新行,因此我没有固定数量的行可供使用。

例如,如果我没有像下面的例子中那样指定索引号,那么它显然会在每行创建三个独立的数组,这不是我想要的:

<input type="text" name="impact_speed[][description]" value="three">
<input type="text" name="impact_speed[][value]" value="30">
<input type="text" name="impact_speed[][unit]" value="fps">

有没有一种方法可以命名我的表单输入而无需动态插入索引号(0,1,2等)?

1 个答案:

答案 0 :(得分:0)

我最终索引了我的数组,因为我意识到这是实现这一目标的唯一实用方法。然后,每次添加行时,我都会递增索引。下面是克隆行后用于递增索引的代码示例。

// If the input names contain an array index, we need to increment it:
$newRow.find('input, select').each(function(){
  $(this).attr('name', $(this).attr('name').replace(/\[([0-9]+)\]/, function(match, capture) {
    return '[' + (parseInt(capture, 10) + 1) + ']' ; 
  }));
});