访问 FormData 值

问题描述 投票:0回答:12

我有一个 FormData 对象,我在

javascript
中从这样的
HTML
形式创建。
FormData
对象似乎没有很好的记录(可能只是我搜索了错误的东西!)。

var form = new FormData(document.getElementById("form"));

我的问题

如何在发送之前访问这个

FormData
对象的不同输入值?例如。
form.name
访问以名称
form.name
.

输入到输入中的值
javascript html form-data
12个回答
26
投票

似乎您无法使用

FormData
获取表单元素的值。

FormData
对象让你编译一组键/值对发送 使用 XMLHttpRequest。 主要用于发送表格 数据,但可以独立于表格使用以传输 键控数据。 传输的数据与表单的格式相同 如果表单的编码类型,则 submit() 方法将用于发送数据 被设置为“multipart/form-data”。

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

var formElements = document.forms['myform'].elements['inputTypeName'].value;

26
投票

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

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

var formData = new FormData();
formData.append("email", "[email protected]");
formData.append("email", "[email protected]");
formData.get("email");

这只会返回该键的first项目,在这种情况下它将返回'[email protected]',使用下面的代码获取所有电子邮件地址

formData.getAll("email")

另请参阅:关于表单数据获取方法的 MDN 文章.


24
投票

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

<form id="form">
  <input name="inputTypeName">
</form>

您可以通过

访问该输入的值
var form = new FormData(document.getElementById("form"));
var inputValue = form.get("inputTypeName");

14
投票

根据MDN

实现 FormData 的对象可以直接用于 for...of 结构,而不是 entries(): 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)
}

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);

8
投票

只需添加到@Jeff Daze 的先前解决方案 - 您可以使用

FormData.getAll("key name")
函数从对象中检索所有数据。


8
投票

我的解决方案

for-of

const formData = new FormData(document.getElementById('form'))

for (const [key, value] of formData) {
  console.log('»', key, value)
}

3
投票

它会起作用

let form = document.querySelector("form");
let data = new FormData(form)
formObj = {};
for (var pair of data.entries()) {
  formObj[pair[0]] = pair[1]
}
console.log(formObj)


1
投票

如果你想做的是获取 FormData 的内容或附加到它,这就是你应该使用的:

假设您想上传这样的图片:

<input type="file" name="image data" onChange={e => 
uploadPic(e)} />

关于更改处理函数:

const handleChange = e => {
    // Create a test FormData object since that's what is needed to save image in server

   let formData = new FormData();

    //adds data to the form object

    formData.append('imageName', new Date.now());
    formData.append('imageData', e.target.files[0]);

}

append:向创建的 formData 对象添加一个条目,其中 imageData 是键,e.target.files[0] 是属性

您现在可以将包含图像数据的 imageData 对象发送到您的服务器进行处理

但是要确认这个 formData 是否有值,一个简单的 console.log(formData)/ 不会这样做,你应该做的是:

//don't forget to add this code to your on change handler 
function
for (var value of formData.values()) {
   console.log(value); 
}

//我希望这能解释我的答案,它适用于 vanilla JavaScript 和 React.js ...提前感谢您的支持


0
投票

另一个解决方案:
HTML:

<form>
<input name="searchtext"  type="search" >'
<input name="searchbtn" type="submit" value="" class="sb" >
</form>

JS:

$('.sb').click( function() {
    var myvar=document.querySelector('[name="searchtext"]').value;
    console.log("Variable value: " + myvar);
});

0
投票

使用 runarberg/formsquare 库 (

npm i --save formsquare
) 的简单 HTML5 方式(表单到对象):

import formsquare from "formsquare";

const valuesObject = formsquare.filter((el) => !el.disabled).parse(document.getElementById('myForm'));
//=> {"foo": "bar"}

https://github.com/runarberg/formsquare


0
投票

您可以使用 get() 方法。 它返回指定键的第一次出现。

例如,您有:

var form = new FormData(document.getElementById("form"));

您可以通过以下方式获得钥匙:

form.get('key_name');

更多细节在这里:https://developer.mozilla.org/en-US/docs/Web/API/FormData/get

© www.soinside.com 2019 - 2024. All rights reserved.