(JS基础)操作表单
<form>
元素对应的时 HTMLFormElement
类型,继承自HTMLElement
,因而拥有与HTMLElement
相同的默认属性。<form>
元素内部还需要"内容",而填充"内容"的元素有<input>
、<button>
、<textarea>
、<select>
、<option>
等,这些成为表单控件,表单控件都有name
特性。
表单基础知识
<form action="" method="post"><input type="text" name="username">// ...
</form>
复制代码
上述例子是一个简单的<form>
表单,action
、method
等为<form>
元素的 HTML 特性(更多查看文档)。通过 JavaScript 也能操作指定特性。
表单对象的属性
- acceptChartset:服务器能够处理的字符集。对应
accept-chartset
特性。 - action:接收表单请求的URL。对应
action
特性。 - elements:表单中所有控件的集合(HTMLCollection)。
- length:表单中控件的数量。
- enctype:请求的编码类型。对应
enctype
特性。 - method:要发送的 HTTP 请求类型,通常
get
或post
,默认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)[...]
复制代码
上述例子中,有几点要注意的:
- 获取表单控件的方法有两个:根据顺序,用索引号获取,如
form1.elements[1]
;根据name
特性获取,如form1.elements['input2']
。 - 根据
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():使该表单字段失去焦点。
autofocus
属性,如<input type="text" autofocus>
。
也可以通过window.onload
事件函数给某个表单字段获得焦点,如window.addEventListener('load', e => {document.forms[0].elements[0].focus()});
。
控件对象的事件
事件只有三个:blur
、focus
、change
。都是比较简单的事件,不过多描述,要注意的只有change
,当"单选"或"多选"发生改变也会触发该事件。更多关于事件的介绍请点击链接。
表单控件的类型
input
<input>
是表单中最常用的一个,根据type
特性的值不同,生成不同的控件。常用的type
值如下。更详细的type
值介绍请查看文档。
- text:文本输入框。
- password:密码输入框,字段中的字符会被遮蔽。
- number:数字输入框,非数字无法输入到框内。还支持最值和步长的设置
- email:邮箱输入框,自带邮箱验证。
- checkbox:勾选框,通常搭配
<label>
使用。 - radio:单选框,通过相同的
name
特性划分同一组单选框,通常搭配<label>
使用。 - file:文件上传框。
- image:图片上传框。
- color:颜色选择框。
- ......
- required:表示必填字段。
- placeholder:针对输入框,表示输入前的占位显示符。
- pattern:针对输入框,表示用于验证输入的正则表达式,如
pattern="\d+"
。 - value:对于输入框,表示初始的值;对于选择框,表示该选项的值。
- maxlength:针对输入框,表示能接受的最大字符数。
- size:针对输入框,表示能显示的字符数。
- min:针对数字输入框,表示数字输入框能输入的最小值。
- max:针对数字输入框,表示数字输入框能输入的最大值。
控件对象的常用属性和方法:
- value:获取控件对象当前的值。
- stepUp()和stepDown():针对数字输入框(
type="number"
),接收一个参数,表示在当前值的基础上增加或减少的值。 - checkValidity():当输入框设置了验证条件(如
type="email"
等自带验证的或带有required
、pattern
等特性的控件),使用该方法可以获取控件的输入是否通过验证,布尔值。更多请查看InputElement API
的文档。 - validity:比checkValidity()更详细,该属性中包含多个属性,都是布尔值,可得到表单字段无效的原因。
- select():针对输入框,使该控件获得焦点,并选择输入框内所有文本。
- setSelectionRange(startIndex, endIndex):同样针对输入框,选择输入框内部分文本,但不会使控件获得焦点,所以使用前需要使用
focus()
取得焦点。startIndex
和endIndex
分别表示字符的索引。
注意,无论是使用鼠标选择文本,还是使用select()
或setSelectionRange()
方法,都会触发输入框的select
事件。
关于禁用验证:通过设置<form>
的novalidite
特性可以禁用整个表单的验证;通过<input type="submit">
的formvalidate
特性,可以使该按钮提示时禁用表单验证。
textarea
与<input type="text">
类似,都是文本输入框,不同的是,<textarea>
可以输入多行文字。
默认状态,<textarea>
可以调节宽高,若想禁用,请设置 CSS 样式:style="resize:none;"
。
通过设置rows
和cols
特性,可以限制<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基础)操作表单相关推荐
- JavaScriptDay08:js运动基础,单物体运动框架,多物体运动框架,改变单一任意值运动框架,改变多值运动框架,完美运动框架
目录 0x00 js的运动基础 0x01 单物体运动框架 0x02 多物体运动框架 0x03 改变单一任意值运动框架 0x04 链式运动框架 0x05 改变多值运动框架 0x06 完美运动框架 0x0 ...
- 【第六章】使用jQuery操作表单和表格2
使用jQuery操作表单元素 操作文本框 1.获取文本框的值 var textCon =$("#id").val(); 或者: var textCon=$("#id&qu ...
- 026——VUE中事件修饰符之使用$event与$prevent修饰符操作表单
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...
- 构建node.js基础镜像_我如何使用Node.js构建工作抓取网络应用
构建node.js基础镜像 by Oyetoke Tobi Emmanuel 由Oyetoke Tobi Emmanuel 我如何使用Node.js构建工作抓取网络应用 (How I built a ...
- JS基础知识学习(一)
JS基础知识 前端开发常用的浏览器 谷歌浏览器(chrome):Webkit内核(v8引擎) 火狐浏览器(firefox):Gecko内核 欧朋浏览器(opera):Presto内核 IE浏览器:Tr ...
- 前端面试题目汇总摘录(JS 基础篇 —— 2018.11.01更新)
温故而知新,保持空杯心态 JS 基础 JavaScript 的 typeof 返回那些数据类型 object number function boolean undefined string type ...
- 前端面试题目汇总摘录(JS 基础篇)
温故而知新,保持空杯心态 JS 基础 JavaScript 的 typeof 返回那些数据类型 object number function boolean undefined string type ...
- ie9无法获取未定义或 null 引用的属性“indexof”_前端JS基础篇(二)JS基本数据类型和引用数据类型及检测数据类型方法...
JS中的数据类型 (一).基本数据类型(值类型) 1.number:数字 -12.12.5.-12.5 0这些数字都是number: js中增加了一个number类型的数据:'NaN' typeof ...
- js笔记(一)js基础、程序结构、函数
大标题 小节 一.js 基础 1. javascript的组成: 2. 运行js: 3. 打印信息: 4. 关键字var: 5. js中的数据类型: 6. NaN(not a number): 7. ...
- angular js创建表单_如何优雅的使用 Angular 表单验证
随便说说,这一节可以跳过 去年参加 ngChine 2018 杭州开发者大会的时候记得有人问我: Worktile 是什么时候开始使用 Angular 的,我说是今年(2018年) 3 月份开始在新模 ...
最新文章
- 神经网络中的权重初始化一览:从基础到Kaiming
- 福利丨吴恩达机器学习新书免费领!
- 九宫怎么排列和使用_别人家连客厅茶几都不要了,你却还在纠结挂画怎么挂
- stl之vector的应用
- 【统计学】【2008.11】中国铜铝未来市场价格的时间序列预测模型
- oracle没有卸载,oracle卸载没有正确卸载怎么办?
- XJOI1131换零钱
- android设置布局背景为空,android 设置背景为空(透明)
- 聊聊程序员与英语,程序员不学英语行吗?
- Linux:error while loading shared libraries: /usr/lib/xx.so.xx: file too short
- cv.WarpAffine函数M变换矩阵讲解
- Linux基本操作知识一
- Activiti集成Activiti Modeler
- java.util.Optional
- 位,字,字节,字地址,字节单元,字存储单元等区别
- 三极管(如NPN)集电极正偏 发射极反偏会怎么样呢? 电流会倒流吗? 其他三种都知道,就是不知道这种情况
- lab1 partⅣ
- Python接私活,兼职也可以月入10000+。Python爬虫兼职
- TCP的CLOSE_WAIT和TIME_WAIT问题汇总
- 使用idm的一些注意事项