<form>元素对应的时 HTMLFormElement类型,继承自HTMLElement,因而拥有与HTMLElement相同的默认属性。<form>元素内部还需要"内容",而填充"内容"的元素有<input><button><textarea><select><option>等,这些成为表单控件,表单控件都有name特性

表单基础知识

<form action="" method="post"><input type="text" name="username">// ...
</form>
复制代码

上述例子是一个简单的<form>表单,actionmethod等为<form>元素的 HTML 特性(更多查看文档)。通过 JavaScript 也能操作指定特性。

表单对象的属性

  • acceptChartset:服务器能够处理的字符集。对应accept-chartset特性。
  • action接收表单请求的URL。对应action特性。
  • elements:表单中所有控件的集合(HTMLCollection)。
  • length:表单中控件的数量。
  • enctype:请求的编码类型。对应enctype特性。
  • method:要发送的 HTTP 请求类型,通常getpost,默认get。对应method特性。
  • name:表单的名称。对应name特性。
  • target:用于发送请求和接收响应的窗口名称。对应target特性。

表单对象的方法

方法只有两个,提交和重置。

关于提交:在相应的表单控件拥有焦点时,点击回车键能提交表单;使用"表单提交按钮"或回车键提交表单,都能触发submit事件。

关于重置:使用"表单重置按钮"或表单对象的reset()方法都能重置表单,都能触发reset事件。重置的值为控件value特性指定的值,如<input type="text" value="first">被重置后则显示"first"。

  • submit()提交表单。不会触发submit事件
  • reset():将所有表单域重置为默认值

获取表单对象

最简单常见的方法就是和获取普通元素一样的方法获取。下面列出两种获取的方法:
<form name="form1" id="myForm"></form>
<form name="form2"></form>复制代码
// 通过元素获取的方法
let form1 = document.getElementById('myForm')
// document.forms可以获取页面所有form元素
let form2 = document.forms.form2复制代码

表单控件(字段)

表单字段指的是,表单中的表单控件(字段)。表单字段组成的集合是一个有序列表,就是表单对象的elements属性。通过该集合可以获取到任意表单字段。下面给出简单例子介绍:

<form name="form1" action="#" id="form1" target=""><!-- div不是表单控件,所以elements不包含该对象 --><div name="div1">div1</div><ul><!-- 即使是嵌套的表单控件,elements也同样能获取 --><li><input type="text" name="input1" value="inputText"></li><li><input type="text" name="input2" value="inputText"></li><!-- name可以相同,elements对象将相同name特性的对象归于同一个RadioNodeList中 --><li><input type="text" name="input2" value="inputText"></li></ul>
</form>复制代码
let form1 = document.getElementById('form1');
// 获取elements对象
console.log(form1.elements);    // HTMLFormControlsCollection(3)[...]
// 通过序号获取
console.log(form1.elements[1]);    // <input type="text" name="input2" value="inputText">
// 通过"name"获取
console.log(form1.elements['input2']);    // RadioNodeList(2)[...]
复制代码

上述例子中,有几点要注意的:

  1. 获取表单控件的方法有两个:根据顺序,用索引号获取,如form1.elements[1]根据name特性获取,如form1.elements['input2']
  2. 根据name特性获取表单控件,可能有三种值:
  • 不存在指定name特性的控件,返回undefined
  • 当指定的name特性的控件只有一个,返回控件元素对象
  • 当指定的name特性的控件多于一个,返回RadioNodeList类型的类数组,存放多个控件元素对象。

表单控件未指定name特性时,仍然在elements对象内,即能用索引号获取,只是无法通过name特性获取。

控件对象的属性

<fieldset>元素外,所有表单控件对象都拥有相同的一组属性。
  • disabled:表示当前字段是否被禁用。布尔值,默认为false。被禁用的字段不会被提交
  • form:指向当前字段所属表单的指针。只读
  • name:当前字段的字段名称
  • readOnly:表示当前字段是否只读。布尔值,默认为false
  • tabIndex:当前字段的切换(tab)序号。(注意,非控件元素也能设置tab-index特性,拥有该特性的元素也能"获得焦点",能触发焦点事件)
  • type:当前字段的类型,如"checkbox"、"radio"等。
  • value:当前字段将提交给服务器的值对于文件字段,该属性是只读的,包含文件路径。

控件对象的方法

表单字段的方法主要是关于焦点控制的。
  • focus():使该表单字段获得焦点
  • blur():使该表单字段失去焦点
HTML5 为表单字段新增了一个autofocus属性,如<input type="text" autofocus>

也可以通过window.onload事件函数给某个表单字段获得焦点,如window.addEventListener('load', e => {document.forms[0].elements[0].focus()});

控件对象的事件

事件只有三个:blurfocuschange。都是比较简单的事件,不过多描述,要注意的只有change,当"单选"或"多选"发生改变也会触发该事件。更多关于事件的介绍请点击链接

表单控件的类型

input

<input>是表单中最常用的一个,根据type特性的值不同,生成不同的控件常用的type如下。更详细的type值介绍请查看文档

  • text:文本输入框。
  • password:密码输入框,字段中的字符会被遮蔽。
  • number:数字输入框,非数字无法输入到框内。还支持最值和步长的设置
  • email:邮箱输入框,自带邮箱验证。
  • checkbox:勾选框,通常搭配<label>使用。
  • radio:单选框,通过相同的name特性划分同一组单选框,通常搭配<label>使用。
  • file:文件上传框。
  • image:图片上传框。
  • color:颜色选择框。
  • ......
除了type特性值外,还有几个特性是需要注意的:
  1. required:表示必填字段
  2. placeholder:针对输入框,表示输入前的占位显示符
  3. pattern:针对输入框,表示用于验证输入的正则表达式,如pattern="\d+"
  4. value:对于输入框,表示初始的值;对于选择框,表示该选项的值
  5. maxlength:针对输入框,表示能接受的最大字符数
  6. size:针对输入框,表示能显示的字符数
  7. min:针对数字输入框,表示数字输入框能输入的最小值。
  8. max:针对数字输入框,表示数字输入框能输入的最大值。

控件对象的常用属性和方法

  1. value:获取控件对象当前的值
  2. stepUp()stepDown():针对数字输入框(type="number"),接收一个参数,表示在当前值的基础上增加或减少的值。
  3. checkValidity():当输入框设置了验证条件(如type="email"等自带验证的或带有requiredpattern等特性的控件),使用该方法可以获取控件的输入是否通过验证,布尔值。更多请查看InputElement API的文档。
  4. validity:比checkValidity()更详细,该属性中包含多个属性,都是布尔值,可得到表单字段无效的原因
  5. select():针对输入框,使该控件获得焦点,并选择输入框内所有文本
  6. setSelectionRange(startIndex, endIndex):同样针对输入框,选择输入框内部分文本,但不会使控件获得焦点,所以使用前需要使用focus()取得焦点。startIndexendIndex分别表示字符的索引。

注意,无论是使用鼠标选择文本,还是使用select()setSelectionRange()方法,都会触发输入框的select事件

关于禁用验证:通过设置<form>novalidite特性可以禁用整个表单的验证;通过<input type="submit">formvalidate特性,可以使该按钮提示时禁用表单验证。

textarea

<input type="text">类似,都是文本输入框,不同的是,<textarea>可以输入多行文字

关于本文输入的知识,上面已经提及,不再赘述。

默认状态,<textarea>可以调节宽高,若想禁用,请设置 CSS 样式:style="resize:none;"

通过设置rowscols特性,可以限制<textarea>行数列数

初始值必须放在起始和结束标签的中间,即<textarea>defaultValue</textarea>

select

<select>是一个提供选项菜单的控件,而<option>为选项菜单的项,还能用<optgroup>包裹多个<option>组成一个分组,并为分组提供命名。以上三个元素的特性请点击各自的链接查看详细,这里只做简单介绍。

简单例子:

<select name="mySelect"><optgroup label="Group 1"><option>Option 1.1</option></optgroup> <optgroup label="Group 2"><option>Option 2.1</option><option>Option 2.2</option></optgroup><optgroup label="Group 3" disabled><option>Option 3.1</option><option>Option 3.2</option><option>Option 3.3</option></optgroup>
</select>
复制代码

效果如下图:

上述例子看出:

<select>中的multiple特性为true时,列表可以多选,默认为false;通过该控件对象上的value属性可以访问当前已选择的值。

<optgroup>label特性表示该分组的名字,仅用于显示,对<select>value不影响。

<option>value值可以省略,当其省略时取标签内的值;selected特性表示该项是否被选中,非多选情况下只能有一个。

选择框控件<select>HTMLSelectElement类型的对象,有以下属性和方法

  • add(newOption, relOption):向选择框控件中插入新<option>元素,其位置在相关项(relOption)之前
  • remove(index)移除指定索引的选项
  • options:选择框控件中所有<option>元素的HTMLCollection
  • multiple:布尔值,选择框控件是否可以多选。等价于multiple特性。
  • selectedIndex:整型值,获取被选中的选项的索引值(0开始)。对于未选择任何项,值为 -1;对于已选择多项,只获取较前的选项的索引值。
  • size:选择框控件中可见的行数。等价于size特性。
  • value:表示已选择的项的值。有三种可能:当无选中项,值为空字符串;当有一个选中项,值为该选项的值;当有多个选中项,值为较前的选项的值。

datalist

<datalist id="datalistName">并不算是表单控件,必须配合<input list="datalistName">使用为输入框提供可选列表。上面已对<option>的使用有简单描述,不多赘述。

简单例子:

<input type="email" list="emails" name="myEmail"/>
<!-- 必须通过ID关联 -->
<datalist id="emails"><option value="1234@qq.com"><option value="666@qq.com"><option value="1888888@139.com">
</datalist>复制代码

效果图如下:

转载于:https://juejin.im/post/5cb53a72e51d456e8a12ef81

(JS基础)操作表单相关推荐

  1. JavaScriptDay08:js运动基础,单物体运动框架,多物体运动框架,改变单一任意值运动框架,改变多值运动框架,完美运动框架

    目录 0x00 js的运动基础 0x01 单物体运动框架 0x02 多物体运动框架 0x03 改变单一任意值运动框架 0x04 链式运动框架 0x05 改变多值运动框架 0x06 完美运动框架 0x0 ...

  2. 【第六章】使用jQuery操作表单和表格2

    使用jQuery操作表单元素 操作文本框 1.获取文本框的值 var textCon =$("#id").val(); 或者: var textCon=$("#id&qu ...

  3. 026——VUE中事件修饰符之使用$event与$prevent修饰符操作表单

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...

  4. 构建node.js基础镜像_我如何使用Node.js构建工作抓取网络应用

    构建node.js基础镜像 by Oyetoke Tobi Emmanuel 由Oyetoke Tobi Emmanuel 我如何使用Node.js构建工作抓取网络应用 (How I built a ...

  5. JS基础知识学习(一)

    JS基础知识 前端开发常用的浏览器 谷歌浏览器(chrome):Webkit内核(v8引擎) 火狐浏览器(firefox):Gecko内核 欧朋浏览器(opera):Presto内核 IE浏览器:Tr ...

  6. 前端面试题目汇总摘录(JS 基础篇 —— 2018.11.01更新)

    温故而知新,保持空杯心态 JS 基础 JavaScript 的 typeof 返回那些数据类型 object number function boolean undefined string type ...

  7. 前端面试题目汇总摘录(JS 基础篇)

    温故而知新,保持空杯心态 JS 基础 JavaScript 的 typeof 返回那些数据类型 object number function boolean undefined string type ...

  8. ie9无法获取未定义或 null 引用的属性“indexof”_前端JS基础篇(二)JS基本数据类型和引用数据类型及检测数据类型方法...

    JS中的数据类型 (一).基本数据类型(值类型) 1.number:数字 -12.12.5.-12.5 0这些数字都是number: js中增加了一个number类型的数据:'NaN' typeof ...

  9. js笔记(一)js基础、程序结构、函数

    大标题 小节 一.js 基础 1. javascript的组成: 2. 运行js: 3. 打印信息: 4. 关键字var: 5. js中的数据类型: 6. NaN(not a number): 7. ...

  10. angular js创建表单_如何优雅的使用 Angular 表单验证

    随便说说,这一节可以跳过 去年参加 ngChine 2018 杭州开发者大会的时候记得有人问我: Worktile 是什么时候开始使用 Angular 的,我说是今年(2018年) 3 月份开始在新模 ...

最新文章

  1. 神经网络中的权重初始化一览:从基础到Kaiming
  2. 福利丨吴恩达机器学习新书免费领!
  3. 九宫怎么排列和使用_别人家连客厅茶几都不要了,你却还在纠结挂画怎么挂
  4. stl之vector的应用
  5. 【统计学】【2008.11】中国铜铝未来市场价格的时间序列预测模型
  6. oracle没有卸载,oracle卸载没有正确卸载怎么办?
  7. XJOI1131换零钱
  8. android设置布局背景为空,android 设置背景为空(透明)
  9. 聊聊程序员与英语,程序员不学英语行吗?
  10. Linux:error while loading shared libraries: /usr/lib/xx.so.xx: file too short
  11. cv.WarpAffine函数M变换矩阵讲解
  12. Linux基本操作知识一
  13. Activiti集成Activiti Modeler
  14. java.util.Optional
  15. 位,字,字节,字地址,字节单元,字存储单元等区别
  16. 三极管(如NPN)集电极正偏 发射极反偏会怎么样呢? 电流会倒流吗? 其他三种都知道,就是不知道这种情况
  17. lab1 partⅣ
  18. Python接私活,兼职也可以月入10000+。Python爬虫兼职
  19. TCP的CLOSE_WAIT和TIME_WAIT问题汇总
  20. 使用idm的一些注意事项

热门文章

  1. 在容器服务kubernetes上配置https
  2. haproxy1.7编译安装配置
  3. 第一周例行报告及作业汇总
  4. 纯CSS实现三列布局(两边固定,中间自适应)
  5. 【提问】iOS UIAtumator 是怎么判断元素isVisible的?
  6. sql中的日期函数和case函数
  7. HP 招聘性能测试PM 北京/上海 长期招聘
  8. 移动端数据爬取和Scrapy框架
  9. Luogu4885 灭顶之灾
  10. spring3: 依赖和依赖注入-xml配置-DI的配置