<input>: HTML 輸入元素
Baseline 廣泛可用 *
<input> HTML 元素用於建立基於 Web 表單的互動式控制元件,以便接受使用者的輸入資料;根據裝置和使用者代理,可以提供各種型別的輸入資料和控制元件小部件。由於輸入型別和屬性組合的數量眾多,<input> 元素是所有 HTML 中最強大和最複雜的元素之一。
試一試
<label for="name">Name (4 to 8 characters):</label>
<input
type="text"
id="name"
name="name"
required
minlength="4"
maxlength="8"
size="10" />
label {
display: block;
font:
1rem "Fira Sans",
sans-serif;
}
input,
label {
margin: 0.4rem 0;
}
<input> 型別
<input> 的工作方式因其 type 屬性的值而異,因此不同型別在其各自的參考頁面中進行了介紹。如果未指定此屬性,則採用的預設型別是 text。
可用的型別如下
| 型別 | 描述 | 基本示例 |
|---|---|---|
| button | 一個沒有預設行為的按鈕,顯示 value 屬性的值,預設為空。 |
|
| checkbox | 一個複選框,允許選擇/取消選擇單個值。 |
|
| color | 一個用於指定顏色的控制元件;在支援的瀏覽器中啟用時會開啟一個顏色選擇器。 |
|
| 日期 | 一個用於輸入日期(年、月、日,無時間)的控制元件。在支援的瀏覽器中啟用時,會開啟日期選擇器或用於年、月、日的數字滾輪。 |
|
| datetime-local | 一個用於輸入日期和時間的控制元件,無時區。在支援的瀏覽器中啟用時,會開啟日期選擇器或用於日期和時間元件的數字滾輪。 |
|
| 電子郵件 | 一個用於編輯電子郵件地址的欄位。看起來像 text 輸入,但在支援的瀏覽器和具有動態鍵盤的裝置中具有驗證引數和相關鍵盤。 |
|
| 檔案 | 一個允許使用者選擇檔案的控制元件。使用 accept 屬性定義控制元件可以選擇的檔案型別。 |
|
| hidden | 一個不顯示但其值會提交到伺服器的控制元件。下一列有一個示例,但它是隱藏的! | |
| 圖片 | 一個圖形 submit 按鈕。顯示由 src 屬性定義的影像。如果影像 src 缺失,則顯示 alt 屬性。 |
|
| 月份 | 一個用於輸入月份和年份的控制元件,無時區。 |
|
| 數字 | 一個用於輸入數字的控制元件。顯示一個微調器並新增預設驗證。在某些具有動態鍵盤的裝置中顯示數字鍵盤。 |
|
| 密碼 | 一個單行文字欄位,其值被遮蔽。如果站點不安全,將提醒使用者。 |
|
| radio | 一個單選按鈕,允許從具有相同 name 值的多個選項中選擇一個值。 |
|
| range | 一個用於輸入其確切值不重要的數字的控制元件。顯示為一個範圍小部件,預設為中間值。與 min 和 max 結合使用以定義可接受值的範圍。 |
|
| reset | 一個將表單內容重置為預設值的按鈕。不推薦使用。 |
|
| search | 一個用於輸入搜尋字串的單行文字欄位。換行符會自動從輸入值中移除。在支援的瀏覽器中可能包含一個刪除圖示,可用於清除欄位。在某些具有動態鍵盤的裝置中顯示搜尋圖示而不是回車鍵。 |
|
| submit | 一個提交表單的按鈕。 |
|
| 電話 | 一個用於輸入電話號碼的控制元件。在某些具有動態鍵盤的裝置中顯示電話鍵盤。 |
|
| 文字 | 預設值。一個單行文字欄位。換行符會自動從輸入值中移除。 |
|
| 時間 | 一個用於輸入時間值,無時區的控制元件。 |
|
| url | 一個用於輸入 URL 的欄位。看起來像 text 輸入,但在支援的瀏覽器和具有動態鍵盤的裝置中具有驗證引數和相關鍵盤。 |
|
| 周 | 一個用於輸入由周-年份數字和週數字組成的日期,無時區的控制元件。 |
|
| 已廢棄的值 | ||
datetime 已廢棄 |
一個用於輸入基於 UTC 時區的日期和時間(小時、分鐘、秒和秒的分數)的控制元件。 |
|
屬性
<input> 元素之所以如此強大,是因為其屬性;上面透過示例描述的 type 屬性是最重要的。由於每個 <input> 元素,無論型別如何,都基於 HTMLInputElement 介面,它們在技術上共享完全相同的屬性集。然而,在實際中,大多數屬性僅對輸入型別的特定子集產生影響。此外,某些屬性影響輸入的方式取決於輸入型別,以不同的方式影響不同的輸入型別。
本節提供了一個列出所有屬性及其簡要描述的表格。此表格之後是更詳細描述每個屬性及其關聯輸入型別的列表。那些對大多數或所有輸入型別都通用的屬性在下面進行了更詳細的定義。特定輸入型別獨有的屬性——或對所有輸入型別都通用但在給定輸入型別上使用時具有特殊行為的屬性——則記錄在這些型別的頁面上。
<input> 元素的屬性包括全域性 HTML 屬性和以下附加屬性
| 屬性 | 型別 | 描述 |
|---|---|---|
accept |
檔案 |
檔案上傳控制元件中預期檔案型別的提示 |
alpha |
color |
顏色的不透明度 |
alt |
圖片 |
影像型別的 alt 屬性。可訪問性所需 |
autocapitalize |
除 url、email 和 password 之外的所有 |
控制輸入文字的自動大寫。 |
autocomplete |
除 checkbox、radio 和按鈕之外的所有 |
表單自動填充功能的提示 |
capture |
檔案 |
檔案上傳控制元件中的媒體捕獲輸入方法 |
checked |
checkbox、radio |
命令或控制元件是否已選中 |
colorspace |
color |
應用於選擇顏色值的顏色空間 |
dirname |
hidden、text、search、url、tel、email |
用於在表單提交中傳送元素方向的表單欄位名稱 |
disabled |
all | 表單控制元件是否被停用 |
form |
all | 將控制元件與表單元素關聯 |
formaction |
image、submit |
用於表單提交的 URL |
formenctype |
image、submit |
用於表單提交的表單資料集編碼型別 |
formmethod |
image、submit |
用於表單提交的 HTTP 方法 |
formnovalidate |
image、submit |
繞過表單提交的表單控制元件驗證 |
formtarget |
image、submit |
用於表單提交的瀏覽上下文 |
height |
圖片 |
與 <img> 的 height 屬性相同;垂直尺寸 |
list |
除 hidden、password、checkbox、radio 和按鈕之外的所有 |
自動完成選項的 <datalist> 的 id 屬性值 |
max |
date、month、week、time、datetime-local、number、range |
最大值 |
maxlength |
text、search、url、tel、email、password |
value 的最大長度(字元數) |
min |
date、month、week、time、datetime-local、number、range |
最小值 |
minlength |
text、search、url、tel、email、password |
value 的最小長度(字元數) |
multiple |
email、file |
布林值。是否允許多個值 |
name |
all | 表單控制元件的名稱。作為名稱/值對的一部分與表單一起提交 |
pattern |
text、search、url、tel、email、password |
value 必須匹配的模式才能有效 |
placeholder |
text、search、url、tel、email、password、number |
當表單控制元件未設定值時顯示的文字 |
popovertarget |
button |
將 <input type="button"> 指定為彈出元素控制元件 |
popovertargetaction |
button |
指定彈出控制元件應執行的操作 |
readonly |
除 hidden、range、color、checkbox、radio 和按鈕之外的所有 |
布林值。值不可編輯 |
required |
除 hidden、range、color 和按鈕之外的所有 |
布林值。表單提交需要一個值或必須選中 |
size |
text、search、url、tel、email、password |
控制元件大小 |
src |
圖片 |
與 <img> 的 src 屬性相同;影像資源的地址 |
step |
date、month、week、time、datetime-local、number、range |
有效的增量值 |
type |
all | 表單控制元件型別 |
value |
除 image 之外的所有 |
控制元件的值。在 HTML 中指定時,對應於初始值 |
width |
圖片 |
與 <img> 的 width 屬性相同 |
在標準屬性的描述之後列出了一些額外的非標準屬性。
單個屬性
accept-
僅對
file輸入型別有效,accept屬性定義了在file上傳控制元件中可選擇的檔案型別。請參閱 檔案 輸入型別。 alpha實驗性-
僅對
color輸入型別有效,alpha屬性為終端使用者提供了設定所選顏色不透明度的能力。 alt-
僅對
image按鈕有效,alt屬性為影像提供替代文字,如果影像src缺失或未能載入,則顯示屬性值。請參閱 圖片 輸入型別。 autocapitalize-
控制輸入文字是否自動大寫,以及以何種方式大寫。有關更多資訊,請參閱
autocapitalize全域性屬性頁面。 autocomplete-
(不是布林屬性!)
autocomplete屬性的值是一個由空格分隔的字串,描述了輸入應提供何種型別的自動完成功能(如果有)。典型的自動完成實現會回憶在同一輸入欄位中輸入的先前值,但可能存在更復雜的自動完成形式。例如,瀏覽器可以與裝置的聯絡人列表整合,以自動完成電子郵件輸入欄位中的email地址。有關允許的值,請參閱autocomplete。autocomplete屬性對hidden、text、search、url、tel、email、date、month、week、time、datetime-local、number、range、color和password有效。此屬性對不返回數字或文字資料的輸入型別無效,對除checkbox、radio、file或任何按鈕型別之外的所有輸入型別均有效。有關更多資訊,包括密碼安全資訊以及
autocomplete對hidden和其他輸入型別有何細微差別的資訊,請參閱autocomplete屬性。 autofocus-
一個布林屬性,如果存在,表示當頁面載入完成時(或當包含該元素的
<dialog>顯示時),輸入應自動獲得焦點。注意:帶有
autofocus屬性的元素可能會在DOMContentLoaded事件觸發之前獲得焦點。文件中最多隻能有一個元素具有
autofocus屬性。如果放在多個元素上,則具有該屬性的第一個元素會獲得焦點。autofocus屬性不能用於hidden型別的輸入,因為隱藏輸入無法獲得焦點。警告:自動聚焦表單控制元件可能會讓使用螢幕閱讀技術和有認知障礙的視障人士感到困惑。當分配
autofocus時,螢幕閱讀器會“瞬間移動”使用者到表單控制元件,而沒有事先警告他們。在使用
autofocus屬性時,請仔細考慮可訪問性。自動聚焦控制元件可能會導致頁面在載入時滾動。焦點還可能導致某些觸控裝置上顯示動態鍵盤。雖然螢幕閱讀器會宣佈獲得焦點的表單控制元件的標籤,但螢幕閱讀器不會在標籤之前宣佈任何內容,小裝置上的視障使用者也會同樣錯過前面內容建立的上下文。 capture-
在 HTML 媒體捕獲規範中引入,並且僅對
file輸入型別有效,capture屬性定義了在支援的場景中,應使用哪種媒體(麥克風、影片或攝像頭)來捕獲要上傳的新檔案與file上傳控制元件。請參閱 檔案 輸入型別。 checked-
對
radio和checkbox型別都有效,checked是一個布林屬性。如果存在於radio型別上,則表示該單選按鈕是同名單選按鈕組中當前選中的一個。如果存在於checkbox型別上,則表示該複選框預設情況下已選中(當頁面載入時)。它不表示此複選框當前是否已選中:如果複選框的狀態發生更改,此內容屬性不會反映更改。(只有HTMLInputElement的checkedIDL 屬性 會更新。)注意:與其他輸入控制元件不同,複選框和單選按鈕的值僅在它們當前處於
checked狀態時才包含在提交的資料中。如果它們已選中,則會提交選中控制元件的名稱和值。例如,如果一個
name為fruit的複選框的value為cherry,並且該複選框已選中,則提交的表單資料將包含fruit=cherry。如果複選框未啟用,則根本不會在表單資料中列出。複選框和單選按鈕的預設value為on。 colorspace實驗性-
僅對
color輸入型別有效,colorspace屬性指定type="color"輸入使用的顏色空間。可能的列舉值為"limited-srgb":顏色位於 sRGB 顏色空間中。這包括rgb()、hsl()、hwb()和<hex-color>值。顏色值限制為每個r、g和b分量 8 位。這是預設值。"display-p3":Display P3 顏色空間,例如color(display-p3 1.84 -0.19 0.72 / 0.6)
dirname-
對
hidden、text、search、url、tel和email輸入型別有效,dirname屬性允許提交元素的目錄。包含時,表單控制元件將提交兩個名稱/值對:第一個是name和value,第二個是dirname屬性的值作為名稱,其值為瀏覽器設定的ltr或rtl。html<form action="page.html" method="post"> <label> Fruit: <input type="text" name="fruit" dirname="fruit-dir" value="cherry" /> </label> <input type="submit" /> </form> <!-- page.html?fruit=cherry&fruit-dir=ltr -->當上述表單提交時,輸入將導致傳送
fruit=cherry的name/value對和fruit-dir=ltr的dirname/ 方向對。有關更多資訊,請參閱dirname屬性。 disabled-
一個布林屬性,如果存在,表示使用者不應與輸入互動。停用輸入通常以較暗的顏色渲染或使用某種其他形式的指示表示該欄位不可用。
具體來說,停用輸入不會接收
click事件,並且停用輸入不會與表單一起提交。注意:儘管規範沒有要求,但 Firefox 預設情況下會 在頁面載入時保留
<input>的動態停用狀態。使用autocomplete屬性來控制此功能。 form-
一個字串,指定輸入關聯的
<form>元素(即其表單所有者)。此字串的值(如果存在)必須與同一文件中<form>元素的id匹配。如果未指定此屬性,則<input>元素與最近的包含表單(如果有)關聯。form屬性允許您將輸入放置在文件中的任何位置,但將其包含在文件其他位置的表單中。注意:一個輸入只能與一個表單關聯。
formaction-
僅對
image和submit輸入型別有效。有關更多資訊,請參閱 submit 輸入型別。 formenctype-
僅對
image和submit輸入型別有效。有關更多資訊,請參閱 submit 輸入型別。 formmethod-
僅對
image和submit輸入型別有效。有關更多資訊,請參閱 submit 輸入型別。 formnovalidate-
僅對
image和submit輸入型別有效。有關更多資訊,請參閱 submit 輸入型別。 formtarget-
僅對
image和submit輸入型別有效。有關更多資訊,請參閱 submit 輸入型別。 height-
僅對
image輸入按鈕有效,height是顯示圖形提交按鈕的影像檔案的高度。請參閱 影像 輸入型別。 id-
對所有元素(包括所有輸入型別)都有效的全域性屬性,它定義了一個唯一的識別符號 (ID),該識別符號在整個文件中必須是唯一的。其目的是在連結時識別元素。該值用作
<label>的for屬性的值,以將標籤與表單控制元件連結。請參閱<label>。 inputmode-
對所有元素都有效的全域性值,它向瀏覽器提供提示,說明在編輯此元素或其內容時應使用哪種型別的虛擬鍵盤配置。值包括
none、text、tel、url、email、numeric、decimal和search。 list-
list屬性的值應為同一文件中<datalist>元素的id。<datalist>提供了一組預定義值,以建議使用者用於此輸入。列表中與type不相容的任何值都不會包含在建議選項中。提供的值是建議,而不是要求:使用者可以從這個預定義列表中選擇,也可以提供不同的值。它對
text、search、url、tel、email、date、month、week、time、datetime-local、number、range和color有效。根據規範,
list屬性不支援hidden、password、checkbox、radio、file或任何按鈕型別。根據瀏覽器,使用者可能會看到建議的自定義調色盤、範圍上的刻度線,甚至是一個像
<select>一樣開啟但允許非列表值的輸入。請檢視其他輸入型別的瀏覽器相容性表。請參閱
<datalist>元素。 max-
對
date、month、week、time、datetime-local、number和range有效,它定義了允許值範圍內的最大值。如果輸入到元素中的value超過此值,則元素將未能透過 約束驗證。如果max屬性的值不是數字,則元素沒有最大值。有一個特殊情況:如果資料型別是週期性的(例如日期或時間),
max的值可能低於min的值,這表示範圍可能迴圈;例如,這允許您指定從晚上 10 點到凌晨 4 點的時間範圍。 maxlength-
對
text、search、url、tel、email和password有效,它定義了使用者可以輸入到欄位中的最大字串長度(以 UTF-16 程式碼單元衡量)。這必須是一個大於或等於 0 的整數值。如果未指定maxlength,或指定了無效值,則欄位沒有最大長度。此值還必須大於或等於minlength的值。如果輸入到欄位中的文字長度大於
maxlengthUTF-16 程式碼單元,則輸入將未能透過 約束驗證。預設情況下,瀏覽器會阻止使用者輸入超過maxlength屬性允許的字元。約束驗證僅在使用者更改值時應用。有關更多資訊,請參閱 客戶端驗證。 min-
對
date、month、week、time、datetime-local、number和range有效,它定義了允許值範圍內的最負值。如果輸入到元素中的value小於此值,則元素將未能透過 約束驗證。如果min屬性的值不是數字,則元素沒有最小值。此值必須小於或等於
max屬性的值。如果min屬性存在但未指定或無效,則不應用min值。如果min屬性有效,並且非空值小於min屬性允許的最小值,則約束驗證將阻止表單提交。有關更多資訊,請參閱 客戶端驗證。有一個特殊情況:如果資料型別是週期性的(例如日期或時間),
max的值可能低於min的值,這表示範圍可能迴圈;例如,這允許您指定從晚上 10 點到凌晨 4 點的時間範圍。 minlength-
對
text、search、url、tel、email和password有效,它定義了使用者可以輸入到輸入欄位中的最小字串長度(以 UTF-16 程式碼單元衡量)。這必須是一個非負整數值,小於或等於maxlength指定的值。如果未指定minlength,或指定了無效值,則輸入沒有最小長度。如果輸入到欄位中的文字長度小於
minlengthUTF-16 程式碼單元,則輸入將未能透過 約束驗證,從而阻止表單提交。約束驗證僅在使用者更改值時應用。有關更多資訊,請參閱 客戶端驗證。 multiple-
布林屬性
multiple(如果設定)表示使用者可以在電子郵件小部件中輸入以逗號分隔的電子郵件地址,或者可以使用file輸入選擇多個檔案。請參閱 電子郵件 和 檔案 輸入型別。 name-
一個字串,指定輸入控制元件的名稱。此名稱與控制元件的值一起在表單資料提交時提交。
將
name視為必需屬性(儘管它不是)。如果輸入沒有指定name,或name為空,則輸入的值不會隨表單一起提交!(停用的控制元件、未選中的單選按鈕、未選中的複選框和重置按鈕也不會發送。)有兩種特殊情況
_charset_:如果用作 hidden 型別的<input>元素的名稱,則輸入的value會由 使用者代理 自動設定為用於提交表單的字元編碼。isindex:出於歷史原因,名稱isindex不允許使用。
name屬性為單選按鈕建立了一種獨特的行為。一組同名單選按鈕中只能有一個單選按鈕處於選中狀態。選擇該組中的任何單選按鈕會自動取消選擇同一組中當前選中的任何單選按鈕。如果表單提交,該一個選中的單選按鈕的值將與名稱一起傳送,
當透過 Tab 鍵進入一系列同名單選按鈕組時,如果其中一個被選中,則該單選按鈕將獲得焦點。如果它們在源順序中沒有分組在一起,如果該組中的一個被選中,則 Tab 鍵進入該組從遇到該組中的第一個時開始,跳過所有未被選中的單選按鈕。換句話說,如果一個被選中,Tab 鍵會跳過該組中未被選中的單選按鈕。如果都沒有被選中,則當達到同名組中的第一個按鈕時,單選按鈕組會獲得焦點。
一旦組中的一個單選按鈕獲得焦點,使用箭頭鍵將導航所有同名的單選按鈕,即使這些單選按鈕在源順序中沒有分組在一起。
當一個輸入元素被賦予
name時,該名稱成為擁有表單元素的HTMLFormElement.elements屬性的一個屬性。如果您有一個name設定為guest的輸入和另一個name設定為hat-size的輸入,可以使用以下程式碼jslet form = document.querySelector("form"); let guestName = form.elements.guest; let hatSize = form.elements["hat-size"];此程式碼執行後,
guestName將是guest欄位的HTMLInputElement,hatSize將是hat-size欄位的物件。警告:避免為表單元素指定與表單內建屬性對應的
name,因為這樣您將用對相應輸入的引用覆蓋預定義的屬性或方法。 pattern-
對
text、search、url、tel、email和password有效,pattern屬性用於編譯一個正則表示式,輸入值的value必須匹配該正則表示式才能透過 約束驗證。它必須是一個有效的 JavaScript 正則表示式,如RegExp型別所使用,並記錄在我們的正則表示式指南中。模式文本週圍不應指定正斜槓。編譯正則表示式時- 模式將隱式地用
^(?:和)$包裹,這樣就要求匹配整個輸入值,即^(?:<pattern>)$。 - 指定
'v'標誌,以便將模式視為 Unicode 程式碼點序列,而不是 ASCII。
如果
pattern屬性存在但未指定或無效,則不應用正則表示式,並且此屬性被完全忽略。如果 pattern 屬性有效且非空值與模式不匹配,則約束驗證將阻止表單提交。如果multiple存在,則編譯後的正則表示式將與每個逗號分隔的值進行匹配。注意:如果使用
pattern屬性,請透過在附近包含解釋性文字來告知使用者預期格式。您還可以包含title屬性來解釋匹配模式的要求;大多數瀏覽器會將其作為工具提示顯示。可見的解釋對於可訪問性是必需的。工具提示是一種增強。有關更多資訊,請參閱 客戶端驗證。
- 模式將隱式地用
placeholder-
對
text、search、url、tel、email、password和number有效,placeholder屬性向使用者提供了一個簡要提示,說明該欄位中預期何種資訊。它應該是一個單詞或短語,提供有關預期資料型別的提示,而不是解釋或提示。文字不得包含回車符或換行符。例如,如果一個欄位預期捕獲使用者的名字,其標籤是“名字”,則合適的佔位符可能是“例如,Mustafa”。注意:如果可以避免,請勿使用
placeholder屬性。如果需要標記<input>元素,請使用<label>元素。 popovertarget-
將
<input type="button">元素轉換為彈出控制按鈕;將其控制的彈出元素的 ID 作為其值。有關更多詳細資訊,請參閱 彈出 API 登陸頁面。使用popovertarget屬性在彈出視窗及其呼叫按鈕之間建立關係還有兩個額外的有用效果- 瀏覽器在彈出視窗和呼叫者之間建立隱式的
aria-details和aria-expanded關係,並在顯示時將彈出視窗放置在鍵盤焦點導航順序中的邏輯位置。這使得彈出視窗對鍵盤和輔助技術 (AT) 使用者更易於訪問(另請參閱 彈出可訪問性功能)。 - 瀏覽器在兩者之間建立了一個隱式錨點引用,使得使用 CSS 錨點定位 來相對於其控制元件定位彈出視窗非常方便。有關更多詳細資訊,請參閱 彈出錨點定位。
- 瀏覽器在彈出視窗和呼叫者之間建立隱式的
popovertargetaction-
指定對由控制元件
<input type="button">控制的彈出元素執行的操作。可能的值是 readonly-
一個布林屬性,如果存在,表示使用者不應編輯輸入的值。
readonly屬性支援text、search、url、tel、email、date、month、week、time、datetime-local、number和password輸入型別。有關更多資訊,請參閱 HTML 屬性:
readonly。 required-
required是一個布林屬性,如果存在,表示使用者必須為輸入指定一個值,然後才能提交所屬表單。required屬性支援text、search、url、tel、email、date、month、week、time、datetime-local、number、password、checkbox、radio和file輸入。有關更多資訊,請參閱 客戶端驗證 和 HTML 屬性:
required。 size-
對
email、password、tel、url和text有效,size屬性指定輸入的顯示大小。基本上與設定 CSSwidth屬性產生相同的結果,但有一些特殊之處。值的實際單位取決於輸入型別。對於password和text,它是一個字元數(或em單位),預設值為20,對於其他型別,它是畫素(或px單位)。CSSwidth優先於size屬性。 src-
僅對
image輸入按鈕有效,src是一個字串,指定用於表示圖形提交按鈕的影像檔案的 URL。請參閱 影像 輸入型別。 step-
對
date、month、week、time、datetime-local、number和range有效,step屬性是一個數字,指定值必須遵循的粒度。只有與步長基數相距整數步數的值才有效。如果指定了min,則步長基數為min,否則為value,如果兩者都未提供,則為0(除了week,其預設步長基數為 −259,200,000,表示1970-W01周的開始)。如果未明確包含
number和range的step預設為 1。- 每個日期/時間輸入型別都有一個適合該型別的預設
step值;請參閱各個輸入頁面:date、datetime-local、month、time和week。
該值必須是一個正數——整數或浮點數——或特殊值
any,這意味著沒有隱含的步長,並且允許任何值(排除其他約束,例如min和max)。例如,如果您有
<input type="number" min="10" step="2">,則任何大於或等於 10 的偶數整數都有效。如果省略<input type="number">,任何整數都有效,但浮點數(如4.2)無效,因為step預設為1。為了使4.2有效,step必須設定為any、0.1、0.2,或者min值必須是一個以.2結尾的數字,例如<input type="number" min="-5.2">。注意:當用戶輸入的資料不符合步長配置時,該值在約束驗證中被視為無效,並將匹配
:invalid偽類。有關更多資訊,請參閱 客戶端驗證。
tabindex-
對所有元素(包括所有輸入型別)都有效的全域性屬性,一個整數屬性,指示元素是否可以獲得輸入焦點(是否可聚焦),以及它是否應參與順序鍵盤導航。由於除隱藏型別的輸入之外的所有輸入型別都是可聚焦的,因此不應在表單控制元件上使用此屬性,因為這樣做需要管理文件中所有元素的焦點順序,如果操作不當,可能會損害可用性和可訪問性。
title-
對所有元素(包括所有輸入型別)都有效的全域性屬性,包含與其所屬元素相關的建議資訊的文字。此類資訊通常(但不一定)以工具提示的形式呈現給使用者。標題不應作為表單控制元件目的的主要解釋。相反,使用
<label>元素,其for屬性設定為表單控制元件的id屬性。請參閱下面的 標籤。 type-
一個字串,指定要渲染的控制元件型別。例如,要建立複選框,使用值
checkbox。如果省略(或指定未知值),則使用輸入型別text,建立純文字輸入欄位。允許的值列在上面的 輸入型別 中。
value-
輸入控制元件的值。在 HTML 中指定時,這是初始值,從那時起,可以使用 JavaScript 訪問相應的
HTMLInputElement物件的value屬性隨時更改或檢索它。value屬性始終是可選的,但對於checkbox、radio和hidden應視為強制性的。 width-
僅對
image輸入按鈕有效,width是顯示圖形提交按鈕的影像檔案的寬度。請參閱 影像 輸入型別。
非標準屬性
以下非標準屬性在某些瀏覽器中也可用。一般來說,除非萬不得已,否則應避免使用它們。
| 屬性 | 描述 |
|---|---|
incremental |
是否傳送重複的 search 事件,以允許在使用者仍在編輯欄位值時更新即時搜尋結果。僅限 WebKit 和 Blink(Safari、Chrome、Opera 等)。 |
mozactionhint 已廢棄 |
一個字串,指示使用者在編輯欄位時按下 Enter 或 Return 鍵時將採取的操作型別;這用於確定虛擬鍵盤上該鍵的適當標籤。由於此屬性已廢棄,請改用 |
orient |
設定範圍滑塊的方向。僅限 Firefox。 |
results |
以前搜尋查詢的下拉列表中應顯示的最大專案數。僅限 Safari。 |
webkitdirectory
|
一個布林值,指示是否只允許使用者選擇一個目錄(如果也存在 multiple,則為多個目錄) |
incremental非標準-
布林屬性
incremental是 WebKit 和 Blink 擴充套件(因此 Safari、Opera、Chrome 等支援),如果存在,它告訴 使用者代理 將輸入處理為即時搜尋。當用戶編輯欄位值時,使用者代理會將search事件傳送到表示搜尋框的HTMLInputElement物件。這允許您的程式碼在使用者編輯搜尋時即時更新搜尋結果。如果未指定
incremental,則search事件僅在使用者明確啟動搜尋時傳送(例如透過在編輯欄位時按下 Enter 或 Return 鍵)。search事件是限速的,因此傳送頻率不會超過實現定義的時間間隔。 orient非標準-
類似於影響
<progress>和<meter>元素的 -moz-orient 非標準 CSS 屬性,orient屬性定義了範圍滑塊的方向。值包括horizontal,表示範圍水平渲染,和vertical,表示範圍垂直渲染。請參閱 建立垂直表單控制元件 以獲取建立垂直表單控制元件的現代方法。 results非標準-
results屬性——僅由 Safari 支援——是一個數值,允許您覆蓋在<input>元素原生提供的先前搜尋查詢下拉選單中顯示的最大條目數。該值必須是非負十進位制數。如果未提供,或給出了無效值,則使用瀏覽器的預設最大條目數。
webkitdirectory非標準-
布林屬性
webkitdirectory(如果存在)表示使用者在檔案選擇器介面中只能選擇目錄。有關更多詳細資訊和示例,請參閱HTMLInputElement.webkitdirectory。儘管最初僅為基於 WebKit 的瀏覽器實現,但
webkitdirectory也可在 Microsoft Edge 以及 Firefox 50 及更高版本中使用。然而,即使它具有相對廣泛的支援,它仍然不是標準,除非沒有其他替代方案,否則不應使用。
方法
HTMLInputElement 介面提供了以下方法,該介面表示 DOM 中的 <input> 元素。此外,還提供了父介面 HTMLElement、Element、Node 和 EventTarget 指定的方法。
checkValidity()-
如果元素的值透過有效性檢查,則返回
true;否則,返回false並在元素上觸發invalid事件。 reportValidity()-
如果元素的值透過有效性檢查,則返回
true;否則,返回false,並在元素上觸發invalid事件,並(如果事件未取消)向用戶報告問題。 select()-
如果元素內容可選擇,則選擇
<input>元素的全部內容。對於沒有可選擇文字內容的元素(例如視覺顏色選擇器或日曆日期輸入),此方法不執行任何操作。 setCustomValidity()-
設定當輸入元素值無效時顯示的自定義訊息。
setRangeText()-
將輸入元素中指定字元範圍的內容設定為給定字串。提供
selectMode引數以允許控制現有內容如何受影響。 setSelectionRange()-
選擇文字輸入元素中指定的字元範圍。對於未呈現為文字輸入欄位的輸入,不執行任何操作。
showPicker()-
顯示輸入元素的瀏覽器選擇器,通常在選擇元素時顯示,但由按鈕按下或其他使用者互動觸發。
stepDown()-
預設情況下,將數字輸入的值減一,或按指定單位數遞減。
stepUp()-
將數字輸入的值增一或按指定單位數遞增。
CSS
輸入是替換元素,具有一些不適用於非表單元素的特性。有一些 CSS 選擇器可以根據其 UI 特性(也稱為 UI 偽類)專門定位表單控制元件。輸入元素也可以透過屬性選擇器按型別定位。還有一些特別有用的屬性。
UI 偽類
| 偽類 | 描述 |
|---|---|
:enabled |
任何當前啟用且可以啟用(選中、點選、輸入等)或接受焦點,並且具有停用狀態,在這種情況下它不能被啟用或接受焦點的元素。 |
:disabled |
任何當前停用但具有啟用狀態的元素,這意味著它在沒有被停用的情況下可以被啟用(選中、點選、輸入等)或接受焦點。 |
:read-only |
使用者不可編輯的元素 |
:read-write |
使用者可編輯的元素。 |
:placeholder-shown |
當前顯示 placeholder 文字 的元素,包括帶有 placeholder 屬性且尚未設定值的 <input> 和 <textarea> 元素。 |
:default |
在一組相關元素中為預設值的表單元素。匹配在頁面載入或渲染時被選中的 複選框 和 單選按鈕 輸入型別。 |
:checked |
匹配當前選中的 複選框 和 單選按鈕 輸入型別(以及 <select> 中當前選中的 <option>)。 |
:indeterminate |
其 indeterminate 屬性由 JavaScript 設定為 true 的 複選框 元素,當表單中所有具有相同名稱值的單選按鈕都未選中時,單選按鈕 元素,以及處於不確定狀態的 <progress> 元素 |
:valid |
可以應用約束驗證並且當前有效的表單控制元件。 |
:invalid |
已應用約束驗證且當前無效的表單控制元件。匹配其值不符合透過其屬性(例如 required、pattern、step 和 max)設定的約束的表單控制元件。 |
:in-range |
非空輸入,其當前值在 min 和 max 屬性指定的範圍限制內,並符合 step 約束。 |
:out-of-range |
非空輸入,其當前值不符合 min 和 max 屬性指定的範圍限制,或者不符合 step 約束。 |
:required |
已設定 required 屬性的 <input>、<select> 或 <textarea> 元素。僅匹配可以必需的元素。包含在不可必需元素上的屬性不會匹配。 |
:optional |
未設定 required 屬性的 <input>、<select> 或 <textarea> 元素。不匹配不可必需的元素。 |
:blank |
當前沒有值的 <input> 和 <textarea> 元素。 |
:user-invalid |
類似於 :invalid,但在失焦時啟用。匹配無效輸入,但僅在使用者互動後,例如透過聚焦控制元件、離開控制元件或嘗試提交包含無效控制元件的表單。 |
:open |
<input> 元素,為使用者顯示選擇器以選擇值(例如 <input type="color">)——但僅當元素處於開啟狀態時,即顯示選擇器時。 |
偽類示例
我們可以根據複選框是否選中來設定複選框標籤的樣式。在此示例中,我們正在設定緊接在選中的輸入後面的 <label> 的 color 和 font-weight。如果 input 未選中,我們沒有應用任何樣式。
input:checked + label {
color: red;
font-weight: bold;
}
屬性選擇器
可以使用屬性選擇器根據表單控制元件的 type 定位不同型別的表單控制元件。CSS 屬性選擇器根據屬性的存在或給定屬性的值匹配元素。
/* matches a password input */
input[type="password"] {
}
/* matches a form control whose valid values are limited to a range of values */
input[min][max] {
}
/* matches a form control with a pattern attribute */
input[pattern] {
}
::placeholder
預設情況下,佔位符文字的顯示是半透明或淺灰色。 ::placeholder 偽元素是輸入的 placeholder 文字。它可以使用有限的 CSS 屬性子集進行樣式設定。
::placeholder {
color: blue;
}
只有適用於 ::first-line 偽元素的 CSS 屬性子集才能在選擇器中使用 ::placeholder 的規則中使用。
caret-color
與文字輸入相關的元素的一個特定屬性是 CSS caret-color 屬性,它允許您設定用於繪製文字輸入插入符的顏色
HTML
<label for="textInput">Note the red caret:</label>
<input id="textInput" class="custom" size="32" />
CSS
input.custom {
caret-color: red;
font:
16px "Helvetica",
"Arial",
sans-serif;
}
結果
field-sizing
field-sizing 屬性使您能夠控制表單輸入的大小調整行為(即,它們預設情況下具有預設的首選大小)。此屬性使您能夠覆蓋預設行為,允許表單控制元件調整大小以適應其內容。
此屬性通常用於建立表單欄位,這些欄位會根據其內容自動調整大小,並隨著輸入更多文字而增長。這適用於接受直接文字輸入的輸入型別(例如,text 和 url)、輸入型別 file 和 <textarea> 元素。
object-position 和 object-fit
在某些情況下(通常涉及非文字輸入和專用介面),<input> 元素是一個替換元素。在這種情況下,可以使用 CSS object-position 和 object-fit 屬性調整元素在其框架內的位置和大小。
樣式
有關如何在 HTML 中為元素新增顏色的更多資訊,請參閱
另請參閱
附加功能
標籤
需要標籤來將輔助文字與 <input> 關聯。<label> 元素提供了關於表單欄位的解釋性資訊,這些資訊始終是合適的(除了您擁有的任何佈局問題)。使用 <label> 來解釋 <input> 或 <textarea> 中應輸入的內容絕不是一個壞主意。
關聯標籤
<input> 和 <label> 元素的語義配對對於螢幕閱讀器等輔助技術非常有用。透過使用 <label> 的 for 屬性將它們配對,您可以以一種讓螢幕閱讀器更精確地向用戶描述輸入的方式將標籤與輸入繫結。
僅僅在 <input> 元素旁邊放置純文字是不夠的。相反,可用性和可訪問性要求包含隱式或顯式 <label>
<!-- inaccessible -->
<p>Enter your name: <input id="name" type="text" size="30" /></p>
<!-- implicit label -->
<p>
<label>Enter your name: <input id="name" type="text" size="30" /></label>
</p>
<!-- explicit label -->
<p>
<label for="name">Enter your name: </label>
<input id="name" type="text" size="30" />
</p>
第一個示例無法訪問:提示和 <input> 元素之間不存在關係。
除了可訪問的名稱之外,標籤還為滑鼠和觸控式螢幕使用者提供了更大的“點選”區域,以便點選或觸控。透過將 <label> 與 <input> 配對,點選其中任何一個都會使 <input> 獲得焦點。如果您使用純文字來“標記”您的輸入,則不會發生這種情況。將提示部分作為輸入的啟用區域有助於有運動控制障礙的人。
作為 Web 開發人員,重要的是我們永遠不要假設人們會知道我們所知道的一切。使用 Web 的人的多樣性——以及您的網站的訪問者的多樣性——幾乎可以保證,如果沒有清晰且正確呈現的標籤,您網站的一些訪問者在思維過程和/或情況方面會有所不同,從而導致他們以與您非常不同的方式解釋您的表單。
佔位符無法訪問
placeholder 屬性允許您指定當 <input> 元素的 content area 為空時顯示在該區域中的文字。佔位符絕不應是理解您的表單所必需的。它不是標籤,不應作為替代品使用,因為它不是。佔位符用於提供有關輸入值應如何顯示的提示,而不是解釋或提示。
佔位符不僅螢幕閱讀器無法訪問,而且一旦使用者在表單控制元件中輸入任何文字,或者如果表單控制元件已經有值,佔位符就會消失。具有自動頁面翻譯功能的瀏覽器在翻譯時可能會跳過屬性,這意味著 placeholder 可能無法翻譯。
注意:如果可以避免,請勿使用 placeholder 屬性。如果需要標記 <input> 元素,請使用 <label> 元素。
客戶端驗證
警告:客戶端驗證很有用,但它不能保證伺服器將收到有效資料。如果資料必須是特定格式,請始終在伺服器端也進行驗證,如果格式無效,則返回 400 HTTP 響應。
除了使用 CSS 根據每個輸入的當前狀態(如上文UI 偽類部分所述)基於 :valid 或 :invalid UI 狀態設定輸入樣式外,瀏覽器還提供了客戶端驗證(嘗試)表單提交。在表單提交時,如果有表單控制元件未能透過約束驗證,支援的瀏覽器將在第一個無效表單控制元件上顯示錯誤訊息;顯示基於錯誤型別的預設訊息,或您設定的訊息。
某些輸入型別和其他屬性對給定輸入的有效值設定了限制。例如,<input type="number" min="2" max="10" step="2"> 表示只有數字 2、4、6、8 或 10 是有效的。可能會發生多種錯誤,包括如果值小於 2 則出現 rangeUnderflow 錯誤,如果值大於 10 則出現 rangeOverflow 錯誤,如果值是 2 到 10 之間的數字但不是偶數(不符合 step 屬性的要求)則出現 stepMismatch 錯誤,或者如果值不是數字則出現 typeMismatch 錯誤。
對於可能值域是週期性的輸入型別(即,在最高可能值處,值會回到起始值而不是結束),max 和 min 屬性的值可能會顛倒,這表示允許的值範圍從 min 開始,繞到最低可能值,然後繼續直到達到 max。這對於日期和時間尤其有用,例如當您希望允許範圍從晚上 8 點到早上 8 點時。
<input type="time" min="20:00" max="08:00" name="overnight" />
特定屬性及其值可能導致特定的 ValidityState 錯誤。
| 屬性 | 相關屬性 | 描述 |
|---|---|---|
max |
validityState.rangeOverflow |
當值大於 max 屬性定義的最大值時發生。 |
maxlength |
validityState.tooLong |
當字元數大於 maxlength 屬性允許的字元數時發生。 |
min |
validityState.rangeUnderflow |
當值小於 min 屬性定義的最小值時發生。 |
minlength |
validityState.tooShort |
當字元數小於 minlength 屬性要求的字元數時發生。 |
pattern |
validityState.patternMismatch |
當包含有效正則表示式的 pattern 屬性,且 value 不匹配時發生。 |
required |
validityState.valueMissing |
當 required 屬性存在,但值為 null 或單選/複選框未選中時發生。 |
step |
validityState.stepMismatch |
值與步長增量不匹配。預設增量為 1,因此如果未包含步長,則 type="number" 僅整數有效。step="any" 永遠不會引發此錯誤。 |
type |
validityState.typeMismatch |
當值型別不正確時發生,例如電子郵件不包含 @ 或 URL 不包含協議。 |
如果表單控制元件沒有 required 屬性、沒有值或空字串,則它不是無效的。即使存在上述屬性,除了 required 之外,空字串也不會導致錯誤。
我們可以設定接受值的限制,支援的瀏覽器將本地驗證這些表單值,並在提交表單時出現錯誤時提醒使用者。
除了上表描述的錯誤之外,validityState 介面還包含 badInput、valid 和 customError 布林只讀屬性。有效性物件包括:
validityState.valueMissingvalidityState.typeMismatchvalidityState.patternMismatchvalidityState.tooLongvalidityState.tooShortvalidityState.rangeUnderflowvalidityState.rangeOverflowvalidityState.stepMismatchvalidityState.badInputvalidityState.validvalidityState.customError
對於這些布林屬性中的每一個,true 值表示指定的驗證失敗原因屬實,但 valid 屬性除外,如果元素的值符合所有約束,則 valid 為 true。
如果存在錯誤,支援的瀏覽器將同時提醒使用者並阻止表單提交。請注意:如果自定義錯誤設定為真值(非空字串或 null 的任何值),則表單將無法提交。如果沒有自定義錯誤訊息,並且所有其他屬性均未返回 true,則 valid 將為 true,並且表單可以提交。
function validate(input) {
let validityState_object = input.validity;
if (validityState_object.valueMissing) {
input.setCustomValidity("A value is required");
} else if (validityState_object.rangeUnderflow) {
input.setCustomValidity("Your value is too low");
} else if (validityState_object.rangeOverflow) {
input.setCustomValidity("Your value is too high");
} else {
input.setCustomValidity("");
}
}
最後一行,將自定義有效性訊息設定為空字串至關重要。如果使用者犯了錯誤,並且設定了有效性,即使所有值都有效,它也將無法提交,直到訊息為 null。
自定義驗證錯誤示例
如果您想在欄位驗證失敗時顯示自定義錯誤訊息,您需要使用 <input>(及相關)元素上可用的約束驗證 API。請看下面的表單:
<form>
<label for="name">Enter username (upper and lowercase letters): </label>
<input type="text" name="name" id="name" required pattern="[A-Za-z]+" />
<button>Submit</button>
</form>
如果您嘗試提交表單時未填寫有效值,或值與 pattern 不匹配,基本的 HTML 表單驗證功能將導致它產生預設錯誤訊息。
如果您想改為顯示自定義錯誤訊息,可以使用如下 JavaScript:
const nameInput = document.querySelector("input");
nameInput.addEventListener("input", () => {
nameInput.setCustomValidity("");
nameInput.checkValidity();
});
nameInput.addEventListener("invalid", () => {
if (nameInput.value === "") {
nameInput.setCustomValidity("Enter your username!");
} else {
nameInput.setCustomValidity(
"Usernames can only contain upper and lowercase letters. Try again!",
);
}
});
示例渲染如下:
簡而言之
- 我們透過
input事件處理程式執行checkValidity()方法,在每次輸入元素的值發生變化時檢查其有效狀態。 - 如果值無效,則會引發
invalid事件,並執行invalid事件處理程式函式。在此函式中,我們使用if ()塊判斷值無效是因為為空,還是因為不匹配模式,並設定自定義有效性錯誤訊息。 - 因此,如果輸入值在按下提交按鈕時無效,將顯示其中一條自定義錯誤訊息。
- 如果有效,它將按預期提交。為此,必須透過呼叫帶有空字串值的
setCustomValidity()來取消自定義有效性。因此,我們每次引發input事件時都這樣做。如果您不這樣做,並且之前設定了自定義有效性,即使輸入在提交時當前包含有效值,它也會註冊為無效。
注意:始終同時進行客戶端和伺服器端輸入約束驗證。約束驗證並不能消除伺服器端驗證的必要性。舊瀏覽器或惡意使用者仍然可能傳送無效值。
注意:Firefox 在許多版本中都支援一個專有錯誤屬性 — x-moz-errormessage — 它允許您以類似的方式設定自定義錯誤訊息。從版本 66 開始,此屬性已移除(請參閱 Firefox bug 1513890)。
本地化
某些 <input> 型別的允許輸入取決於語言環境。在某些語言環境中,1,000.00 是一個有效的數字,而在其他語言環境中,輸入此數字的有效方式是 1.000,00。
Firefox 使用以下啟發式方法來確定驗證使用者輸入的區域設定(至少對於 type="number")
- 嘗試元素或其任何父元素上由
lang/xml:lang屬性指定的語言。 - 嘗試任何
Content-LanguageHTTP 頭指定的語言。或者, - 如果未指定,則使用瀏覽器的區域設定。
無障礙
標籤
包含輸入時,新增標籤是無障礙性要求。這對於使用輔助技術的人來說是必需的,以便他們可以知道輸入的用途。此外,單擊或觸控標籤會使焦點位於標籤關聯的表單控制元件上。這提高了視力使用者(sighted users)的無障礙性和可用性,增加了使用者可以單擊或觸控以啟用表單控制元件的區域。這對於微小的單選按鈕和複選框尤其有用(甚至是必需的)。有關標籤的更多資訊,請參閱標籤。
以下是如何將 <label> 與 <input> 元素以上述樣式關聯的示例。您需要為 <input> 提供一個 id 屬性。然後 <label> 需要一個 for 屬性,其值與輸入的 id 相同。
<label for="peas">Do you like peas?</label>
<input type="checkbox" name="peas" id="peas" />
大小
互動式元素(例如表單輸入)應提供足夠大的區域,以便易於啟用它們。這有助於各種人群,包括有運動控制問題的人以及使用非精確輸入方式(例如觸控筆或手指)的人。建議最小互動尺寸為 44×44 CSS 畫素。
技術摘要
| 內容類別 |
流內容,列出,可提交,可重置,表單關聯元素,短語內容。如果 type 不是 hidden,則為可標記元素,可感知內容。 |
|---|---|
| 允許內容 | 無;它是一個空元素。 |
| 標籤省略 | 必須有起始標籤,且不能有結束標籤。 |
| 允許父級 | 任何接受短語內容的元素。 |
| 隱式 ARIA 角色 | |
| 允許的 ARIA 角色 |
|
| DOM 介面 | HTMLInputElement |
規範
| 規範 |
|---|
| HTML # the-input-element |
瀏覽器相容性
載入中…