2017-08-01 57 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