2017-08-01 55 views
7

正在創建使用表單ID的FORMDATA對象,並執行以下操作:通過迭代對象FORMDATA在Internet Explorer中,使用JavaScript

var formDataDetails = new FormData(document.getElementById("form_id")); 
for (var entry of formDataDetails{ 
    res[entry[0]] = entry[1]; 
} 

上午後做JSON字符串化和做POST。

但是我最近發現for..of循環在'Internet Explorer'中不支持。我相信使用for..in循環是不正確的,因爲它用於遍歷可枚舉對象(而非循環對象的屬性)。

我應該如何去通過formData迭代Internet Explorer?

+1

還沒有答案。捕獲表單細節並執行POST的最佳方式是什麼,以便代碼在IE中也能正常工作? –

+0

我正面臨完全相同的問題。 我仍在努力解決..頭痛即將到來。 – Delphine

回答

0

我發現,就這篇文章而言,IE仍然無法可靠地在for..of循環中通過FormData對象工作。所以,我的解決方案,當你需要迭代集合時,避免FormData。 FormData在IE中正常工作,如果你只是用它來發布表單數據。

如果您需要在發送表單前迭代表單的值,那麼您可以像我這樣做 - 直接使用form.elements集合。

事情是這樣的:

export function form2Obj(f) { 
    var elemArray = f.elements; 
    var formObj = {}; 
    for (var k in elemArray) { 
     var input = elemArray[k]; 
     if (!input || !input.name || !input.value) continue; 
     formObj[input.name] = input.value; 
     // etc, need special handling for inputs of type radio 
     // checkbox, textarea, and select most likely 
    } 
    return formObj; 

}

爲了記錄在案,我使用的WebPack編譯到ES6。當我在dev模式下編譯時,IE可以處理for..of循環。當我在生產模式下編譯IE時不是工作。

+1

有趣的是,每次我打開IE瀏覽器測試我的應用程序,它仍然問我「你想讓IE瀏覽器默認瀏覽器?」。熱鬧。 – jomofrodo