代码如下:
$(".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时,尽管所有单选按钮具有不同的值,但ID,日期和类型都是相同的
有任何想法吗?
您必须创建一个新对象,否则将重复更新和推送相同的对象。
$(".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();
});
每当你需要每次创建一个新副本而不是推送时,你都会将same reference
推送到数组
$(".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);