当前位置: 首页 > news >正文

html js获取session_如何用 JS 一次获取 HTML 表单的所有字段 ?

问:如何用 JS 一次获取 HTML 表单的所有字段 ?

考虑一个简单的 HTML 表单,用于将任务保存在待办事项列表中:

<form>
    <label for="name">用户名</label>
    <input type="text" id="name" name="name" required>

    <label for="description">简介</label>
    <input type="text" id="description" name="description" required>

    <label for="task">任务</label>
    <textarea id="task" name="task" required></textarea>

    <button type="submit">提交</button>
  </form>

上面每个字段都有对应的的typeIDname属性,以及相关联的label。 用户单击“提交”按钮后,我们如何从此表单中获取所有数据?

有两种方法:一种是用黑科技,另一种是更清洁,也是最常用的方法。为了演示这种方法,我们先创建form.js,并引入文件中。

从事件 target 获取表单字段

首先,我们在表单上为Submit事件注册一个事件侦听器,以停止默认行为(它们将数据发送到后端)。

然后,使用this.elementsevent.target.elements访问表单字段:

相反,如果需要响应某些用户交互而动态添加更多字段,那么我们需要使用FormData

使用 FormData

首先,我们在表单上为submit事件注册一个事件侦听器,以停止默认行为。接着,我们从表单构建一个FormData对象:

const form = document.forms[0];

form.addEventListener("submit", function(event) {
  event.preventDefault();
  const formData = new FormData(this);
});

除了append()delete()get()set()之外,FormData 还实现了Symbol.iterator。这意味着它可以用for...of 遍历:

const form = document.forms[0];

form.addEventListener("submit", function(event) {
  event.preventDefault();
  const formData = new FormData(this);

  for (const formElement of formData) {
    console.log(formElement);
  }
})

b71fdac79cdb0cb2d2210ed844caad97.png

396c8df3ce9cfe96c85f384303bdb5b5.png

除了上述方法之外,entries()方法获取表单对象形式:

const form = document.forms[0];

form.addEventListener("submit", function(event) {
  event.preventDefault();
  const formData = new FormData(this);
  const entries = formData.entries();
  const data = Object.fromEntries(entries);
});

这也适合Object.fromEntries() (ECMAScript 2019)

为什么这有用?如下所示:

const form = document.forms[0];

form.addEventListener("submit", function(event) {
  event.preventDefault();
  const formData = new FormData(this);
  const entries = formData.entries();
  const data = Object.fromEntries(entries);

  // send out to a REST API
  fetch("https://some.endpoint.dev", {
    method: "POST",
    body: JSON.stringify(data),
    headers: {
      "Content-Type": "application/json"
    }
  })
    .then(/**/)
    .catch(/**/);
});

一旦有了对象,就可以使用fetch发送有效负载。

小心:如果在表单字段上省略 name属性,那么在FormData对象中刚没有生成。

总结

要从HTML表单中获取所有字段,可以使用:

  • this.elementsevent.target.elements,只有在预先知道所有字段并且它们保持稳定的情况下,才能使用。

使用FormData构建具有所有字段的对象,之后可以转换,更新或将其发送到远程API。

自学前端需要几个月 还有需要学到什么程度?​www.zhihu.com
0e46b7ab80ed4a095f510bf2cdcbc05b.png
作者:前端小智
链接: https:// segmentfault.com/a/1190 000024510448
来源:segmentfault
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处

相关文章:

  • springboot默认数据源如何设置连接数_HTML如何设置复选框、单选框以及默认选项?...
  • pta求阶乘序列前n项和_python在时间序列分析中的简介
  • python链表实现多项式_Python数据结构——链表的实现
  • python的整数类型_Python数字类型Number
  • python变量名有哪些_python变量名命名规则
  • unity3d 求两个点长度_初二数学经典的做对称求最小值问题,也是中考中的常客...
  • java调用shell获取错误信息_python学习笔记---linux/windows调用sas程序
  • python中continue和pass的区别_Python中 break continue pass 之间的异同点
  • python装饰器wrappe_Python进阶-III 函数装饰器(Wrapper)
  • java 传绝对路径无效_java架构师系列1-数据结构(2)数组
  • ros 机械臂复位_DYNAMIXEL PRO PH54-200-S500-R 开源机械臂
  • pb数据窗char只有255_MySQL的基本数据类型
  • c语言 malloc_研究了多年C语言,却还没有搞懂malloc和free
  • 从零开始学python数据分析 电子版_从零开始学Python数据分析与挖掘[PDF][67.81MB]
  • 蓝桥杯c语言难还是JAVA难_校园人物 | 用C语言谱写别样人生——记校“十佳青年”数大学院孙露明...
  • classpath对获取配置文件的影响
  • HTTP那些事
  • JavaScript 基本功--面试宝典
  • java小心机(3)| 浅析finalize()
  • nodejs调试方法
  • Promise面试题,控制异步流程
  • python大佬养成计划----difflib模块
  • SpiderData 2019年2月23日 DApp数据排行榜
  • Vue ES6 Jade Scss Webpack Gulp
  • 百度小程序遇到的问题
  • 分类模型——Logistics Regression
  • 那些被忽略的 JavaScript 数组方法细节
  • 深入浏览器事件循环的本质
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 用element的upload组件实现多图片上传和压缩
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​【已解决】npm install​卡主不动的情况
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • ( 10 )MySQL中的外键
  • (翻译)terry crowley: 写给程序员
  • (五)IO流之ByteArrayInput/OutputStream
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .Net FrameWork总结
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .NET面试题解析(11)-SQL语言基础及数据库基本原理
  • .NET设计模式(11):组合模式(Composite Pattern)
  • .net网站发布-允许更新此预编译站点
  • .NET学习教程二——.net基础定义+VS常用设置
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • [ 云计算 | AWS 实践 ] 基于 Amazon S3 协议搭建个人云存储服务
  • []C/C++读取串口接收到的数据程序
  • [20190401]关于semtimedop函数调用.txt
  • [C++] 统计程序耗时
  • [HDOJ4911]Inversion
  • [HDU 3555] Bomb [数位DP]
  • [iOS开发]iOS中TabBar中间按钮凸起的实现