我有任意数量的'行'我需要通过表单发布的数据,以实现以下数组结构,以便impact_speed
将包含x个数组,每个数组包含description
,value
和unit
元素:
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等)?
答案 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) + ']' ;
}));
});