使用jQuery在字段名称中递增数组

时间:2013-07-07 19:00:15

标签: jquery

我有一个表单,允许用户自动添加字段块。由于各种原因,这些字段需要与其块中的其他字段相关联。我正在通过将每个块中的所有字段放在一个数组中来完成此操作,如下所示

<select name="items[0][item_type]" class="item_type">
     <option value="0">Bulding / Landscaping</option> 
     <option value="1">Full / Thin Veneer</option> 
</select>

<select class="select_custom" name="items[0][standard]">
      <option value="0">Standard</option> 
      <option value="1">Custom</option> 
</select>

这会让我回到像Array ( [0] => Array ( [item_type] => 0 [standard] => 1 ) )那样的东西,这样我就能轻松处理后端的数据。

问题是必须指定数组索引才能使其正常工作。当我添加一个像上面那样的新字段时,我需要一种方法来改变所有items[][fieldname]的索引。

下面是我用来将输入块附加到文档的代码。它们都包含在div中,因此我只是克隆该div并将其追加到最后一个div之后。

$('#more_fields').click(function(){
    $('.field_group:first').clone(true).hide().insertAfter('.field_group:last').slideDown('slow');
        var last = $('.field_group:last');
        last.append(new_button.clone(true));
        last.find('select').val([]);
        last.find(".custom_products").css("display","none");
        last.find(".unit_selection").css("display","none");
        last.find(".landscape_selection").css("display","none");
        last.find(".veneer_selection").css("display","none");
        last.find(".comments_section").css("display","none");
        last.find(".standard").css('display','none');
    });

1 个答案:

答案 0 :(得分:1)

您可以完全省略索引,它将在表单提交时自动处理:

<select name="item_type[]" class="item_type">
  <option value="0">Bulding / Landscaping</option> 
  <option value="1">Full / Thin Veneer</option> 
</select>

<select class="select_custom" name="item_standard[]">
  <option value="0">Standard</option> 
  <option value="1">Custom</option> 
</select>

为每个新组提供索引增量:

Demo

var current =  $(".field_group").length - 1;
last.find('select.item_type')
  .attr("name", "items[" + current + "][item_type]");
last.find('select.select_custom')
  .attr("name", "items[" + current + "][standard]");