2017-02-20 56 views
0

我知道这个问题在很多时候问过之前我已经研究了很多,但是我找不到解决方案。所以,我有一个表单,我正在获取表单值与数据数组form.serializeArray();而我创建一个对象obj与此数组。我需要将每个对象都推送到新阵列personArray。但是推送这个数组中的对象只会返回最后一个被推入的对象我怎么解决这个问题。我需要存储哪些来自形式在personArray将对象推送到数组只会返回推送的最后一个对象

var obj = {}; 
 
var data, i; 
 
var personArray = []; 
 
var pageArray = []; 
 

 
$("#submitButton").click(function() { 
 
    addButton(); 
 
    // addTable(); 
 
    // pagination(); 
 
    // resetForm(''); 
 
}); 
 

 
/*Formdaki verileri objeye aktarır, objeyi array'a aktarır*/ 
 
function addButton() { 
 
    data = $('#personForm').serializeArray(); 
 
    for (i = 0; i < data.length; i++) { 
 
    obj[data[i].name] = data[i].value; 
 
    } 
 

 
    personArray.push(obj); 
 
    console.log(personArray); 
 
    /*Datayı array'e aktarır*/ 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
 
<form id="personForm"> 
 
    <div> 
 
    <label for="firstname">İsim:</label> 
 
    <input type="text" id="firstname" name="firstname" value="" placeholder="İsim" /> 
 
    </div> 
 
    <div> 
 
    <label for="lastname">Soyisim:</label> 
 
    <input type="text" id="lastname" name="lastname" value="" placeholder="Soyisim" /> 
 
    </div> 
 
    <div> 
 
    <label for="tc">TC:</label> 
 
    <input type="tel" id="tc" name="tc" value="" placeholder="TC Kimlik No" /> 
 
    </div> 
 
    <div> 
 
    <label for="birthday">Doğum T:</label> 
 
    <input type="date" id="birthday" name="birthday" /> 
 
    </div> 
 
    <div> 
 
    <input type="button" value="Kaydet" id="submitButton" /> 
 
    </div> 
 
</form>

+0

你能说明问题的工作示例,或者至少是添加您的HTML到问题。还要注意,你可以通过使用'$('#personForm:input')。map(...)' –

+0

当然我可以简化逻辑 – Furkan

+0

我已经添加了我的项目的HTML部分@RoryMcCrossan – Furkan

回答

0

每一个新的对象试试这个!

var data, i; 
var personArray = []; 
var pageArray = []; 

$("#submitButton").click(function() { 
    addButton(); 
    // addTable(); 
    // pagination(); 
    // resetForm(''); 
}); 

/*Formdaki verileri objeye aktarır, objeyi array'a aktarır*/ 
function addButton() { 
    var obj = {}; 
    data = $('#personForm').serializeArray(); 
    for (i = 0; i < data.length; i++) { 
    obj[data[i].name] = data[i].value; 
    } 

    personArray.push(obj); 
    console.log(personArray); 
    /*Datayı array'e aktarır*/ 
} 
2

您使用的是同一个对象,所以每次都再次overiding已经推对象,并重新推送时间。由于对象只是对内存空间的引用,因此每次都必须创建一个新对象,否则最终只会推入多次相同的对象。这是发生了什么事的解释:

var arr = []; 
 

 
var o = {}; 
 

 
o["data"] = "hello"; 
 
arr.push(o); 
 

 
o["other"] = "world"; 
 
arr.push(o); 
 

 
console.log(arr);

这里是你应该做的:

var hash = {}; // the hash object 
var data, i; 
var personArray = []; 
var pageArray = []; 

$("#submitButton").click(function() { 
    addButton(); 
    // addTable(); 
    // pagination(); 
    // resetForm(''); 
}); 

function addButton() { 
    var obj = {}; // create a brand new object every time 
    data = $('#personForm').serializeArray(); 
    for (i = 0; i < data.length; i++) { 
    obj[data[i].name] = data[i].value; 
    hash[data[i].name] = data[i].value; // assign to the hash object 
    } 

    personArray.push(obj); 
    console.log(personArray); 
} 
+0

它们的工作,但这些对象中的两个是相同的,但我需要在该函数之外使用此obj。例如,​​'+ obj [firstname] +'。并且它必须在函数 – Furkan

+1

@Furkan外面使用数组!或者使用另一个散列对象! –

相关问题