2017-02-20 21 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

Вы используете один и тот же объект, поэтому каждый раз, когда вы переопределяете уже выдвинутый объект и снова его подталкиваете. Поскольку объект - это просто ссылка на пространство в памяти, вы должны каждый раз создавать новый объект или вы будете в конечном итоге тем же самым объектом, который многократно нажал. Вот объяснение того, что происходит:

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 [имя] +'. и он должен за пределами функции – Furkan

+1

@Furkan вы можете использовать массив! Или используйте другой хэш-объект! –