【问题标题】:Iterating through formData object in Internet Explorer, using javascript使用 javascript 遍历 Internet Explorer 中的 formData 对象
【发布时间】:2018-01-07 17:47:08
【问题描述】:

我正在使用表单 ID 创建一个 formData 对象,并且正在执行以下操作:

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

我后来做 JSON 字符串化和做 POST。

但我最近发现“Internet Explorer”尚不支持for..of 循环。而且我相信使用for..in 循环是不正确的,因为它用于遍历可枚举对象(而是循环遍历对象的属性)。

对于 Internet Explorer,我应该如何遍历 formData?

【问题讨论】:

  • 还没有答案。捕获表单详细信息并执行 POST 以使代码在 IE 中也能工作的最佳方法是什么?
  • 我面临着完全相同的问题。我还在努力处理..头痛来了。
  • Iterating through FormData in IE 的可能重复项这有关于此的 polyfill 的信息

标签: javascript json internet-explorer form-data


【解决方案1】:

我发现,在这篇文章中,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。当我在开发模式下编译时,IE 可以处理 for..of 循环。当我在生产模式下编译时,IE 确实 not 工作。

【讨论】:

  • 有趣的是,每次我打开 IE 测试我的应用程序时,它仍然在问我“你想让 IE 成为你的默认浏览器吗?”。搞笑。
猜你喜欢
  • 2012-12-28
  • 1970-01-01
  • 1970-01-01
  • 2012-03-23
  • 1970-01-01
  • 2017-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多