FormData.delete()的不一致 [英] inconsistency from FormData.delete()

查看:25
本文介绍了FormData.delete()的不一致的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

var data = new FormData(document.getElementsByTagName("form")[0]);
for(var [key, value] of data.entries()) {
	if (!value) {
    data.delete(key);
    console.log(data.getAll(key));
  }
}

<form>
  <input name="x[1]" type="text" value="">
  <input name="y[2]" type="text" value="">
  <input name="z[3]" type="text" value="">
  <input name="a[4]" type="text" value="">
</form>

我有此表单,我使用 FormData()获取了它的数据,然后删除了所有空值,但是即使它们为空,总会有那些未被删除的随机键

I have this form and I get its data using FormData() then I remove the empty values which is all of them but there is always those random not deleted keys even while it is empty

推荐答案

即使您删除了 if 逻辑并只记录了 key 并将其删除,也只有第一个和第三个键被删除.这很奇怪.同时删除和循环相同的键集合可能是 ,导致其行为如下:

Even if you remove the if logic and just log the key and delete it, only the first and the third keys are deleted. This is pretty weird. Simultaneously deleting and looping the same collection of keys is probably causing it to behave this way:

var data = new FormData(document.querySelector("form"));

for(var [key, value] of data.entries()) {
    console.log(key); // only 2 keys get logged
    data.delete(key);
}

console.log(Array.from(data.keys())) // still 2 keys are left

<form>
  <input name="x[1]" type="text" value="">
  <input name="y[2]" type="text" value="">
  <input name="z[3]" type="text" value="">
  <input name="a[4]" type="text" value="">
</form>

一个解决方法是使用 Array.from() .现在,当从 FormData 中删除键时,该数组将不受影响:

One fix would be to convert the iterator to an array of entries using Array.from(). Now when the keys are deleted from FormData, the array won't affected:

var data = new FormData(document.querySelector("form"));

for(var [key, value] of Array.from(data.entries())) {
    console.log(key); // every key gets logged now
    data.delete(key);
}

console.log(Array.from(data.keys())) // all are deleted

<form>
  <input name="x[1]" type="text" value="">
  <input name="y[2]" type="text" value="">
  <input name="z[3]" type="text" value="">
  <input name="a[4]" type="text" value="">
</form>

这篇关于FormData.delete()的不一致的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆