2015-12-26 65 views
2
$('#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是每一行的類名稱。我遍歷每一行來獲取值。jQuery .push()不工作

console.log(dataObj);顯示每一行輸入。但是,這些字段僅添加最後一個添加了'n'次的對象。 n =行數。

輸出在控制檯是在這裏: enter image description here

+1

認沽' var dataObj = {};'*在'each()'代碼塊中。你也可以使用'map()'和'serializeArray()'使你的代碼更加簡單,但是我們需要看你的HTML來告訴你如何。 –

+0

哦..男人..你救了我的時間。我試着把var fields = [];在每個裏面。但是,var dataObj = {};裏面的每個(),剛剛工作 – Fasna

+0

很高興幫助。我將它添加爲你的答案。 –

回答

2

你需要把var dataObj = {};每個()代碼塊裏面,所以它是空的每個.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)); 
});