<form>
元素对应的时 HTMLFormElement
类型,继承自HTMLElement
,于是拥有与HTMLElement
相同的默认属性。<form>
元素内部还须要"内容",而填充"内容"的元素有<input>
、<button>
、<textarea>
、<select>
、<option>
等,这些成为表单控件,表单控件都有name
特性。javascript
<form action="" method="post"> <input type="text" name="username"> // ... </form> 复制代码
上述例子是一个简单的<form>
表单,action
、method
等为<form>
元素的 HTML 特性(更多查看文档)。经过 JavaScript 也能操做指定特性。html
accept-chartset
特性。action
特性。enctype
特性。get
或post
,默认get
。对应method
特性。name
特性。target
特性。方法只有两个,提交和重置。java
关于提交:在相应的表单控件拥有焦点时,点击回车键能提交表单;使用"表单提交按钮"或回车键提交表单,都能触发submit
事件。正则表达式
关于重置:使用"表单重置按钮"或表单对象的reset()
方法都能重置表单,都能触发reset
事件。重置的值为控件value
特性指定的值,如<input type="text" value="first">
被重置后则显示"first"。数组
submit
事件。<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
特性获取表单控件,可能有三种值:undefined
;RadioNodeList
类型的类数组,存放多个控件元素对象。name
特性时,仍然在elements
对象内,即能用索引号获取,只是没法经过name
特性获取。<fieldset>
元素外,全部表单控件对象都拥有相同的一组属性。
false
。tab-index
特性,拥有该特性的元素也能"得到焦点",能触发焦点事件)autofocus
属性,如
<input type="text" autofocus>
。
也能够经过window.onload
事件函数给某个表单字段得到焦点,如window.addEventListener('load', e => {document.forms[0].elements[0].focus()});
。post
事件只有三个:blur
、focus
、change
。都是比较简单的事件,不过多描述,要注意的只有change
,当"单选"或"多选"发生改变也会触发该事件。更多关于事件的介绍请点击连接。ui
<label>
使用。name
特性划分同一组单选框,一般搭配<label>
使用。pattern="\d+"
。控件对象的经常使用属性和方法:
type="number"
),接收一个参数,表示在当前值的基础上增长或减小的值。type="email"
等自带验证的或带有required
、pattern
等特性的控件),使用该方法能够获取控件的输入是否经过验证,布尔值。更多请查看InputElement API
的文档。focus()
取得焦点。startIndex
和endIndex
分别表示字符的索引。注意,不管是使用鼠标选择文本,仍是使用select()
或setSelectionRange()
方法,都会触发输入框的select
事件。
关于禁用验证:经过设置<form>
的novalidite
特性能够禁用整个表单的验证;经过<input type="submit">
的formvalidate
特性,可使该按钮提示时禁用表单验证。
与<input type="text">
相似,都是文本输入框,不一样的是,<textarea>
能够输入多行文字。
默认状态,<textarea>
能够调节宽高,若想禁用,请设置 CSS 样式:style="resize:none;"
。
经过设置rows
和cols
特性,能够限制<textarea>
的行数和列数。
初始值必须放在起始和结束标签的中间,即<textarea>defaultValue</textarea>
。
<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
类型的对象,有如下属性和方法:
<option>
元素,其位置在相关项(relOption)以前。<option>
元素的HTMLCollection
。multiple
特性。size
特性。<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>复制代码
效果图以下: