2016-11-18 62 views
0

如何爲Object.keys調用在IE 9中失敗的補丁?

我在這是這裏所描述的相同的問題背景資料: Object.keys not working in internet Explorer 本質上講,我試圖調用Object.keys但它的失敗在IE中。

我試着將上面的帖子中提出的解決方案調整到我的代碼中,但它不工作。

這裏是原來的代碼是什麼樣子 - 我只顯示包圍調用Object.keys代碼:(鉻作品)

for (var key in res) { 
     if (Object.keys(res[key]['associated_users']).length > 0) { 
       //do something here to build htmlstring with data 
     } else { 
       htmlstring += "<td>&nbsp;</td>"; 
     } 
    } //end for loop 

在IE 9中,系統上線失敗它調用Object.keys方法。

我嘗試了阿賈克斯成功處理程序內循環之前,添加以下邏輯來檢查瀏覽器是否支持Object.keys:

  var len = 0;    
     if (!Object.keys) { 
       var temp = keyslengthforIE(res); 
       len = temp.length; 
     } else { 
       len = Object.keys(res[key]['associated_users']).length; 
     } 
     if (len > 0) { 
       //do something here to build htmlstring with data 
     } else { 
       htmlstring += "<td>&nbsp;</td>"; 
     } 

這裏還有什麼新的功能「keyslengthforIE」的模樣:

function keyslengthforIE(obj) { 
    var keys = []; 
    for (var i in obj) { 
     if (obj.hasOwnProperty(i)) { 
     keys.push(i); 
     } 
    } 
    return keys; 
} 

問題

有兩個問題,我的代碼,我不知道怎麼到f九。

  1. 當IE看到對Object.keys的調用時,IE仍然抱怨。 我收到錯誤「Object.keys:參數不是對象」,它指向行319.行319是這樣的:

    len = Object.keys(res [key] ['associated_users']).length ;

  2. 從新函數返回的len實際上是錯誤的。我知道它應該是10,但我越來越1.

任何意見,將不勝感激。

編輯1

現在我知道它在IE 9支持,我看到我的錯誤。 將發佈答案

+2

'Object.keys'在IE9提供,你的問題是,'RES [key] ['associated_users']'不是對象 – adeneo

+0

@adeneo doh!好。我明白你的意思了。請參閱編輯1 – Happydevdays

+0

如果您想在舊版瀏覽器中修補缺少的方法,只需使用[標準polyfill](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys#Polyfill)創建'Object.keys'函數,而不是寫一個特定的'keyslengthforIE'並測試在每次調用前使用哪一個函數。 – Bergi

回答

0

我不得不改變原來的代碼:

for (var key in res) { 
     if (Object.keys(res[key]['associated_users']).length > 0) { 
       //do something here to build htmlstring with data 
     } else { 
       htmlstring += "<td>&nbsp;</td>"; 
     } 
    } //end for loop 

看起來像這樣:

for (var key in res) { 
    if ((res[key]['associated_users']) && (Object.keys(res[key]['associated_users']).length > 0)) { 
       //do something here to build htmlstring with data 
     } else { 
       htmlstring += "<td>&nbsp;</td>"; 
     } 
    } //end for loop