使用jQuery将输入字段解析为格式化的json

时间:2013-01-11 06:41:27

标签: javascript jquery json

我正忙于表单重复,当按下提交时,我希望它以下列格式解析为json:

{ "dependant1": [
  { "name": "daniel"},
  ],"dependant2": [
  { "name": "steve"},
  ]
}

每个添加的依赖项,此时,如果我添加多个依赖项,则返回“{} {}”但如果只有一个依赖项,则返回“{”name“:”steve“}。

任何帮助都非常有用。 下面是代码:

jQuery的:

        //Clone Tracking
var g_counter = 1;
var d_counter = 1;
var dependant = ["dependant"];
var group;
//Clone Tracking
//General Variables
var name_input_groups = ["name-group-1"];
//General Variables
//Generate variables
var name_fields=[0];
var name_input = "<input class='name' />";
//Generate variables
jQuery(document).ready(function(e) {
    jQuery(name_fields).each(function() {
        jQuery(name_input).appendTo('#name-group-1');
    });
    //populate jquery generated fields
    //Cloning Function
    jQuery('#clone').click(function() {
        clone_dependant();
    });

    function clone_dependant() {
        // Store the value of the previous Id to insert the cloned div..
        var oldId = g_counter;
        g_counter++;
        // Clone the Dependant Div and set a new id
        var $clonedDiv = jQuery('#dependant-1').clone(false).attr('id', 'dependant-'+g_counter);
        var name_newDiv = 'name-group-'+ g_counter;
        // Find div's inside the cloned object and set a new id's
        $clonedDiv.find('#name-group-1').attr('id',"name-group-" + g_counter );
        // You don't need to Loop thru the inputs to set the value
        $clonedDiv.find('input').val('');
        // Insert the cloned object 
        $clonedDiv.insertAfter("#dependant-" + oldId);
        name_input_groups.push(name_newDiv);
    };
    //Cloning Function
    function validate_gen() {};
//submit function
var dep_counter = 0
jQuery('#submit').click(function(){
    $('.dependant').each(function(k, v){
        dep_counter++;
        var dependants = {};
    dependants['name'] = jQuery("#name-group-" + dep_counter).find('input').val();
        var json = JSON.stringify(dependants); 
        console.log(json);
    });
});
});

并且继承了HTML:

<div id="dependant-1" class="dependant">
    name<div id="name-group-1"></div>
</div>
<div id="test"></div>

<button id="clone">clone</button>
<button id="submit">submit</button>

和jsFiddle链接 - http://jsfiddle.net/dawidvdh/TzRu8/2/

感谢。

3 个答案:

答案 0 :(得分:1)

你的json格格不入。您可以使用http://jsonlint.com/来 验证您的json格式。

例如,这是一种正确的格式

 { "dependant1": [{ "name": "daniel"}] },
 { "dependant2": [{ "name": "steve" }] }

您需要重新编写脚本以生成有效的json格式。按照上面的模式添加更多的依赖...除非史蒂夫是丹尼尔的子依赖,然后结构更接近你开始的。

答案 1 :(得分:1)

您的代码中有两个错误。

1:

$clonedDiv.find('#name-group-1').attr('id',"#name-group-" + g_counter );

在'name-group'之前应该没有'#':

$clonedDiv.find('#name-group-1').attr('id',"name-group-" + g_counter );

2:

dependants['name'] = jQuery("#name-group-" + g_counter ).val();

其中'g_counter'应为'dep_counter'。

<强> [更新]

哦,对不起,我忘记了第三个错误:

dependants['name'] = jQuery("#name-group-" + dep_counter ).val();

应该是:

dependants['name'] = jQuery("#name-group-" + dep_counter ).find('input').val();

修复这些错误后,您可以使用以下代码获得所需内容:

var dep_counter = 0
var result = {};
jQuery('#submit').click(function(){
    $('.dependant').each(function(k, v){
        dep_counter++;
        var dependants = {};
        dependants['name'] = jQuery("#name-group-" + dep_counter).find('input').val();
        result['dependant'+dep_counter] = [dependants];
    });
    console.log(JSON.stringify(result));
});

答案 2 :(得分:0)

只需使用以下代码即可完美运行:

    var result = {};
var dependants;
jQuery('#submit').click(function(){
    $('.dependant').each(function(k, v){
        dependants = {};
        dependants['name'] = $(v).find('.name').val();
        dependants['surname'] = $(v).find('.surname').val();
        dependants['id'] = idNumber;
        dependants['age'] = $(v).find('.age').val();
        dependants['gender'] = $(v).find('.gender').val();
        dependants['cell'] = cell_values;
        dependants['passport'] = pass_values;
        dependants['relationship'] = $(v).find('.relationship:checked').val();
        result['dependant'+g_counter] = [dependants];
    });

    var jsonData = JSON.stringify(result);

    console.log(jsonData);

    $.ajax({
        type: "POST",
        url: "mail.php",
        dataType: "json",
        data: {parameters: jsonData}
    });

});

谢谢大家:)