访问FormData值

Stu*_*ing 24 html javascript form-data

我有一个FormData对象,我javascript从这样的HTML形式创建.该FormData对象似乎没有很好的文档(它可能只是我搜索错误的东西!).

var form = new FormData(document.getElementById("form"));
Run Code Online (Sandbox Code Playgroud)

我的问题

FormData在发送之前如何访问此对象的不同输入值?例如.form.name使用名称访问输入到输入的值form.name.

Pra*_*een 18

看来你无法使用表单元素的值FormData.

FormData对象允许您编译一组键/值对以使用XMLHttpRequest发送.它主要用于发送表单数据,但可以独立于表单使用,以便传输密钥数据.如果表单的编码类型设置为"multipart/form-data",则传输的数据格式与表单的submit()方法用于发送数据的格式相同.

但是你可以使用像这样的简单Javascript来实现它

var formElements = document.forms['myform'].elements['inputTypeName'].value;
Run Code Online (Sandbox Code Playgroud)

  • **这个答案不再正确。** 正如其他答案指出的那样,“FormData”可以使用“for...of”循环进行迭代。 (7认同)
  • 太遗憾了.从FormData中获取它们会好得多.不管怎么说,还是要谢谢你. (4认同)

Jef*_*aze 17

首先,我认为不可能从您指定的表单中构建FormData对象,并从表单中获取值使用接受的答案中描述的方法 - 这更像是一个附录!

看起来你可以从formdata对象中获取一些数据:

var formData = new FormData();
formData.append("email", "test1@test.com");
formData.append("email", "test2@test.com");
formData.get("email");
Run Code Online (Sandbox Code Playgroud)

不幸的是,这只会返回该密钥的第一项,在这种情况下,它将返回'test1@test.com'

另请参阅:关于formdata get方法的MDN文章

希望这可以帮助!

另请注意,如果要在chrome中对此进行测试,则必须启用实验性Web功能标记:

注意:对"追加"以外的方法的Chrome支持目前位于"启用实验性Web平台功能"标志的后面.

MDN页面; 在浏览器兼容性部分中


car*_*iam 12

FormData.get将在一小部分浏览器中执行您想要的操作 - 查看浏览器兼容性图表以查看哪些(目前只有Chrome 50+和Firefox 39+).鉴于此形式:

<form id="form">
  <input name="inputTypeName">
</form>
Run Code Online (Sandbox Code Playgroud)

您可以通过访问该输入的值

var form = new FormData(document.getElementById("form"));
var inputValue = form.get("inputTypeName");
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,你今天救了我的命,你的解决方案应该被标记为正确 (2认同)

小智 8

这是从 FormData 检索键值对的解决方案:

var data = new FormData( document.getElementById('form') );
data = data.entries();              
var obj = data.next();
var retrieved = {};             
while(undefined !== obj.value) {    
    retrieved[obj.value[0]] = obj.value[1];
    obj = data.next();
}
console.log('retrieved: ',retrieved);
Run Code Online (Sandbox Code Playgroud)


小智 7

只需添加@Jeff Daze的先前解决方案 - 您可以使用该FormData.getAll("key name")函数从对象中检索所有数据.


San*_*ues 7

我的解决方案是for-of

\n\n
const formData = new FormData(document.getElementById('form'))\n\nfor (const [key, value] of formData) {\n  console.log('\xc2\xbb', key, value)\n}\n
Run Code Online (Sandbox Code Playgroud)\n


小智 6

根据MDN

实现 FormData 的对象可以直接用于 for...of 结构,而不是 entry(): for (var p of myFormData) 等价于 for (var p of myFormData.entries())

因此,您可以像这样访问 FormData 值:

var formData = new FormData(myForm);

for (var p of formData) {
    let name = p[0];
    let value = p[1];

    console.log(name, value)
}
Run Code Online (Sandbox Code Playgroud)


Aka*_*ash 6

我发现了一种将表单数据转换为对象的极其简单的方法:

  const formData = new FormData(evt.currentTarget)
  const formObject = Object.fromEntries(formData.entries()) // {}
Run Code Online (Sandbox Code Playgroud)

请注意,对于多个条目(例如复选框);你需要单独处理formData.getAll("favFruits")(例如)

const handleSubmit = (evt) => {
  evt.preventDefault()
  const formData = new FormData(evt.currentTarget)
  const formObject = Object.fromEntries(formData.entries())

  // caveat for multiple values
  formObject.favFruits = formData.getAll("favFruits")
  console.log(formObject)
}
Run Code Online (Sandbox Code Playgroud)
<form onsubmit="handleSubmit(event)">
  <input type="text" value="James" name="firstName" required placeholder="First Name..." />
  <input type="text" name="lastName" value="Bond" required placeholder="Last Name..." />
  <label>
  <br />
  <h5>Fav Fruits</h5>
  <input type="checkbox" name="favFruits" value="watermelon" />
  Watermelon
  </label>
  <label>
  <input type="checkbox" name="favFruits" checked value="apple" />
  Apple
  </label>
  <label>
  <input type="checkbox" name="favFruits" checked value="orange" />
  Orange
  </label>
  <br />
  <br />
  <input type="submit" value="Submit" />
</form>
Run Code Online (Sandbox Code Playgroud)