0

タイトルが正しいかどうかはわかりませんが、現在、JSON 文字列化された複製可能なフォームと、JSON 文字列化された別の通常の入力があるため、クローンをクリックすると 2 番目の入力がクローンされ、送信をクリックすると iコンソールで次の値を取得します。

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

2つを組み合わせて取得するにはどうすればよいですか:

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

ここにjsFiddleがあります:http://jsfiddle.net/dawidvdh/uhJ7w/

そしてコード:

jQuery:

//Clone Tracking
var g_counter = 1;
var d_counter = 1;
var dependant = ["dependant"];
var input_groups = ["group-1"];
var group;
var name_input_groups = ["name-group-1"];
var values;
var name_fields=[0];
var name_input = "<input class='name' name='name' type='text' />";
jQuery(document).ready(function(e) {
    jQuery(name_fields).each(function() {
        jQuery(name_input).appendTo('#name-group-1');
    });
    jQuery('#clone').click(function() {
        clone_dependant();
    });

    function clone_dependant() {
        var oldId = g_counter;
        g_counter++;
        var id_newDiv = 'group-'+ g_counter;
        currentdep ='dependant-'+g_counter;
        var $clonedDiv = jQuery('#dependant-1').clone(false).attr('id', 'dependant-'+g_counter);
        var name_newDiv = 'name-group-'+ g_counter;
        $clonedDiv.find('#name-group-1').attr('id',"name-group-" + g_counter );
        $clonedDiv.find('input[type="text"]').val('');
        $clonedDiv.insertAfter("#dependant-" + oldId);
        name_input_groups.push(name_newDiv);
        input_groups.push(id_newDiv);
    }

var result = {};
var dependants;
var mainmember;
var main_result = {};
var dep_counter = 0;
jQuery('#submit').click(function(){
    jQuery('.dependant').each(function(k, v){
        dep_counter++
        dependants = {};
        result['dependant'+dep_counter] = [dependants];
        dependants['name'] = $(v).find('.name').val();
    });
    jQuery('.main-member').each(function(k, v){
        mainmember  = {}
        mainmember['name'] = $(v).find('.main_name').val();
        main_result['mainmember'] = [mainmember];
    });
    var jsonData = JSON.stringify(result);
    var mainData = JSON.stringify(main_result);

    console.log(jsonData);
    console.log(mainData);

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

そしてhtml

<div id="main-member" class="main-member">
    <div id="label">full name:</div>                <input class="main_name" />
</div>
<div id="dependant-1" class="dependant">
    <div id="label">full name:</div>            <div id="name-group-1"></div>
</div>
<button id="clone">Add a Dependant</button>
<button id="submit">submit</button>

また、コードの残りの部分を操作するには、それぞれのループ内に存在する必要があります。

前もって感謝します :)。

4

5 に答える 5

4

result2 つの異なる変数と を使用しないでくださいmain_result。1 つのみを使用してください。

個別に必要な場合は、それらのすべてのプロパティを、文字列化する新しい空のオブジェクトにコピーします。そのために使用できますjQuery.extend

var jsonData = JSON.stringify($.extend({}, result, main_result));
于 2013-01-16T19:28:52.340 に答える
2

jQuery.extend出来る、

var theData = $.extend({}, result, main_result, true);

...
data: { parameters: JSON.stringify(theData) },
...
于 2013-01-16T19:24:12.737 に答える
2

を使用し$.extendます。

var jsonData = JSON.stringify($.extend({}, result, main_result));

ドキュメンテーション:

jQuery.extend( target [, object1 ] [, objectN ] )

戻り値:オブジェクト

説明:2つ以上のオブジェクトのコンテンツを最初のオブジェクトにマージします。


最適には、代わりに単一のオブジェクトを使用する必要があります。

var data = {};
jQuery('.dependant').each(function(k, v){
    dep_counter++
    data['dependant' + dep_counter] = [{
      name: $(v).find('.name').val()
    }];
});
jQuery('.main-member').each(function(k, v){
    data['mainmember'] = [{
      name: $(v).find('.main_name').val()
    }];
});
...
jQuery.ajax({
    ...
    data: { parameters: data }
    ...
});
于 2013-01-16T19:24:21.060 に答える
2

jQueryのextendを探していると思います

console.log(jsonData);
console.log(mainData);

jQuery.ajax({
    type: "POST",
    url: "mail.php",
    dataType: "json",
    data: {parameters: jQuery.extend(mainData, jsonData)}
});
于 2013-01-16T19:25:54.163 に答える
0

2 つの個別のオブジェクトを作成する代わりに、1 つのオブジェクトを作成するだけです

    jQuery('.dependant').each(function(k, v){
        dep_counter++
        dependants = {};
        result['dependant'+dep_counter] = [dependants];
        dependants['name'] = $(v).find('.name').val();
    });
    jQuery('.main-member').each(function(k, v){
        mainmember  = {}
        mainmember['name'] = $(v).find('.main_name').val();
        result['mainmember'] = [mainmember];
    });

デモ

于 2013-01-16T19:28:57.020 に答える