使用JSON对动态生成的输入字段进行分组

时间:2013-04-07 16:37:24

标签: php jquery json

好的我需要帮助才能正确编写jquery代码和php

这个想法

我希望用户生成多个表一次点击“添加表”按钮,用户可以在每个表内生成属性一次点击“添加属性”按钮

我想使用Json和jquery.post()将此表单作为多维数组或嵌套对象发送,然后php代码可以访问每个字段

IMAGE: http://s11.postimg.org/4haqtm8tf/image.jpg

HTML

<form id="step_2"> <b>Type name of the table:</b> 
  <input type="button" value="Add table" class="add" id="add_t" class="space" />
  <br/>
  <input type="hidden" id="db" name='db_name' value="<?php echo $db; ?>" />
  <!----------------->
  <div id="table_wrap">
    <fieldset id="table1">
      <legend>Table:</legend>
      <input type="text" class="tablename" id="table_name" name="table_name" />
      <input type="button" value="Add attribute" class="add space" id="add" />
      <br/>
      <div class="fieldwrapper" id="field1">
        <b>Attribute</b>
        <input type="text" class="fieldname" id="att" name="att" />
        <select class="fieldtype" id="type" name="type">
          <option value="num">Number</option>
          <option value="text">Text</option>
          <option value="dt">Date/Time</option>
        </select>
      </div>
    </fieldset>
  </div>
  <!--------------------->
  <input type="button" id="back_2" value="Back" />
  <input type="button" id="save_2" value="Save" />
  <input type="button" id="next_2" value="Next" />
</form>

1 个答案:

答案 0 :(得分:0)

我认为JSON数据可以是这样的:

  [
     {
        "table_name":"table1",
        "attributes":[
           {
              "attr_name":"id",
              "type":"integer"
           },
           {
              "attr_name":"name",
              "type":"string"
           }
        ]
     },
     {
        "table_name":"table2",
        "attributes":[
           {
              "attr_name":"id",
              "type":"integer"
           },
           {
              "attr_name":"category_id",
              "type":"integer"
           }
        ]
     }
  ]

使用jQuery,您可以轻松生成此数据结构。这是我的建议代码,我没有测试过,但想法是它;)

function saveTableData() {
  var tables = [];

  $("#table_wrap fieldset").each(function(index, fieldset){
    // Contains the whole table data
    var table_data = {};
    table_data['table_name'] = $(fieldset).find("#table_name").val();

    // Contains the attributes data
    var attributes = [];

    // To loop all attributes fields
    $(fieldset).find(".fieldwrapper").each(function(idx, attr){
      var attr = {};
      attr['attr_name'] = $(attr).find("#att").val();
      attr['type'] = $(attr).find("#type").val();

      // Add to the attributes collection.
      attributes.push(attr);
    });

    // Then attach attributes to the table data object.
    table_data['attributes'] = attributes;

    // Finally add the table data to final result collection.
    tables.push(table_data);
  });

  // Do something more with result ...
  $.post("/save", {"tables": tables}, function(response) {
    // ...
  })
}

然后在您的服务器端代码中,您只需要处理参数&#34;表&#34; (值是一个数组),然后通过它来做更多的事情。

希望有所帮助:)