2014-09-30 34 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字符串化功能將排除未定義值的屬性,所以首先檢查是否缺少的屬性具有值