$('#create').click(function(){

    var metaObj = {};
    var dataObj = {};
    var fields = [];
    $('#tableform').find(".meta").each(function(){

        metaObj[this.name] = this.value;
    });

    $('.datarow').each(function () {

        $('td > input, select',this).each(function () {
            dataObj[this.name] = this.value;

        });
        console.log(dataObj);
        fields.push(dataObj);
    });

    console.log(JSON.stringify(metaObj));
    console.log(JSON.stringify(fields));
});


我的桌子里面有一张桌子。每行都有相同的输入字段。 datarow是每一行的类名称。我遍历每一行以获取值。

console.log(dataObj);显示输入的每一行。但是,字段仅对最后添加“ n”次的对象进行数组排列。 n =行数。

控制台的输出在这里:
jquery - jQuery .push()无法正常工作-LMLPHP

最佳答案

您需要将var dataObj = {};放在each()代码块中,以便在每个.datarow迭代开始时为空:

$('#create').click(function() {
    var metaObj = {};
    var fields = [];

    $('#tableform').find(".meta").each(function(){
        metaObj[this.name] = this.value;
    });

    $('.datarow').each(function () {
        var dataObj = {}; // move declaration here
        $('td > input, select',this).each(function () {
            dataObj[this.name] = this.value;
        });
        console.log(dataObj);
        fields.push(dataObj);
    });

    console.log(JSON.stringify(metaObj));
    console.log(JSON.stringify(fields));
});

09-25 21:17