#javascript #jquery
#javascript #jquery
Вопрос:
Код ниже:
$(".day_a_radio").change(function()
var radio_array = [];
var radio_object = {};
$("input.day_a_radio:checked").each(function() {
radio_object["id"] = $(this).data("id");
radio_object["date"] = $(this).data("date");
radio_object["type"] = $(this).data("type");
radio_array.push(radio_object);
});
console.log(radio_array);
У меня есть несколько десятков переключателей с атрибутами данных id, date и type. Когда нажимается один из них, я перебираю их все. Затем в этом цикле для каждого проверяемого я заполняю массив объектами.
Однако, когда я выполняю console.log, идентификатор, дата и тип остаются одинаковыми, несмотря на то, что все переключатели имеют разные значения
Есть идеи?
Комментарии:
1. Вы обновляете один и тот же объект на каждой итерации. Вам нужно создавать новый объект на каждой итерации
Ответ №1:
Вы должны создать новый объект, в противном случае один и тот же объект обновляется и нажимается повторно.
$(".day_a_radio").change(function(){
var radio_array = [];
var radio_object = {};
$("input.day_a_radio:checked").each(function() {
// MAKE A NEW OBJECT
radio_object = {};
radio_object["id"] = $(this).data("id");
radio_object["date"] = $(this).data("date");
radio_object["type"] = $(this).data("type");
radio_array.push(radio_object);
});
Вы также могли бы немного упростить это с помощью карты.
$(".day_a_radio").change(function(){
var radio_array = $("input.day_a_radio:checked").map(function() {
var $this = $(this);
return {
id: $this.data("id"),
date: $this.data("date"),
type: $this.data("type")
};
}).get();
});
Ответ №2:
Вы нажимаете same reference
на массив to каждый раз, когда вам нужно каждый раз создавать новую копию, а затем нажимаете
$(".day_a_radio").change(function()
var radio_array = [];
$("input.day_a_radio:checked").each(function() {
var obj = {} // It creates a new object everytime
obj["id"] = $(this).data("id");
obj["date"] = $(this).data("date");
obj["type"] = $(this).data("type");
radio_array.push(obj);
});
console.log(radio_array);