2014-09-30 36 views
1

我有下面显示的代码。 我的问题是:部分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

什么'localStorage.getItem(“模型”)'和'JSON.stringify(模型)'返回? – Cerbrus 2014-09-30 14:20:53

+0

他们都返回“{”InternalNumber“:”22“}” – user1960836 2014-09-30 14:32:04

回答

1

你打电话给saveObjectToLocal函数怎么样。该函数内部的$(this)可能不匹配任何东西,因为“this”可能是全局(窗口)对象,并且DOM元素在窗口对象内不匹配。

看看我在说什么。运行:

$(this); 
$(this).find("input"); 
$(this).find("input").attr("id"); 

从您的控制台。第一个输出将是窗口的长度1,第二个将是一个空的jQuery对象,第三个将是未定义的。

在空的jQuery列表上调用.val()和.attr将是未定义的,因此不会序列化为JSON。 InternalNumber已被序列化,因为currentParcel.children正在进行匹配。您需要修复$(this)选择器。

+0

这确实是答案。解决方案是(像你提到的)通过id而不是$(this)来获得控制权, – user1960836 2014-09-30 14:45:13

0

的Json字符串化功能将排除未定义值的属性,所以首先检查是否缺少的属性具有值