Q:如何用JS一次获取HTML表单的所有字段?考虑一个简单的HTML表单,用于将任务保存在待办事项列表中:
上面的每个字段都有对应的类型、ID和名称属性,以及关联的标签。用户单击提交按钮后,我们如何从该表单中获取所有数据?有两种方法:一种是黑科技,一种是比较干净,也是最常用的方法。为了演示此方法,我们首先创建form.js并将其导入到文件中。从事件目标获取表单字段首先,我们在表单上为Submit事件注册一个事件侦听器以停止默认行为(它们将数据发送到后端)。然后,使用this.elements或event.target.elements访问表单字段:相反,如果我们需要动态添加更多字段以响应某些用户交互,那么我们需要使用FormData。使用FormData首先,我们为表单上的提交事件注册一个事件侦听器以停止默认行为。接下来,我们从表单构造一个FormData对象:constform=document.forms[0];form.addEventListener("submit",function(event){event.preventDefault();constformData=newFormData(this);});除了append()、delete()、get()、set(),FormData还实现了Symbol.iterator。这意味着它可以通过for...of:constform=document.forms[0];form.addEventListener("submit",function(event){event.preventDefault();constformData=newFormData(this);for(constformElementofformData){console.log(formElement);}})除了以上方法,entries()方法获取表单对象form:constform=document.forms[0];form.addEventListener("submit",function(event){event.preventDefault();constformData=newFormData(this);constentries=formData.entries();constdata=Object.fromEntries(entries);});这也适用于Object.fromEntries()(ECMAScript2019)为什么这有效?如下:constform=document.forms[0];form.addEventListener("submit",function(event){event.preventDefault();constformData=newFormData(this);constentries=formData.entries();constdata=Object。fromEntries(entries);//sendouttoaRESTAPIfetch("https://some.endpoint.dev",{method:"POST",body:JSON.stringify(data),headers:{"Content-Type":"application/json"}}).then(/**/).catch(/**/);});获得对象后,您可以使用fetch发送有效负载。注意:如果在表单字段上省略了名称属性,则不会在FormData对象中生成任何内容。总结要从HTML表单中获取所有字段,您可以使用:this.elements或event.target.elements,前提是所有字段都是预先已知的并且它们保持稳定。使用FormData构建一个包含所有字段的对象,之后可以对其进行转换、更新或发送到远程API。*