我有如下所示的代码。
我的问题是:console.log(obj)
部分说的是Object {InternalNumber = 22 }
而忽略了所有其他变量。
我期待它说:
Object { Id = someID, ParameterId="someParaId", InternalNumber = someNr, value="someValue"}
可能有什么问题?
如果你没有注意到......我将对象保存到localStorage,然后从那里检索它。
function getModel() {
var model = {
Id: '',
ParameterId: '',
InternalNumber: '',
Value: ''
}
return model;
}
function saveObjectToLocal() {
model = getModel();
model.Id = $(this).find(':input[name$=Id]').val();
model.ParameterId = $(this).attr('id');
model.InternalNumber = currentParcel.children('#viewModel_InternalNumber').val();
model.Value = $(this).find(':input[name$=Value]').val();
localStorage.setItem("model", JSON.stringify(model));
}
function getObjectFromLocalAndInsertInFields() {
obj = JSON.parse(localStorage.getItem("model"));
console.log(obj);
}
答案 0 :(得分:1)
您如何调用saveObjectToLocal
函数。 $(this)里面的函数可能不匹配任何东西,因为"这个"可能是全局(窗口)对象,DOM元素在窗口对象中不匹配。
看看我在谈论什么。运行:
$(this);
$(this).find("input");
$(this).find("input").attr("id");
从您的控制台。第一个输出将是窗口的长度1,第二个是空的jQuery对象,第三个是未定义的。
在空的jQuery列表上调用.val()和.attr将是未定义的,因此不会序列化为JSON。 InternalNumber是序列化的,因为currentParcel.children正在给出匹配。你需要修复$(this)选择器。
答案 1 :(得分:0)
Json stringify函数将排除具有未定义值的属性,因此首先检查缺少的属性是否具有值