<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>複製代碼
效果圖以下: