Skip to content

HTML 輸入欄位 input:type 與常用屬性總覽

HTML 輸入欄位 input:各種 type 與常用屬性

<input> 主要用在 表單 互動中,以便接收來自使用者輸入的內容。且可依據表單元素不同的屬性,顯示出不同使用者介面與資料,type 就決定了它是文字框、密碼框還是核取方塊。不過瀏覽器的驗證只是體驗,不是防線。

屬性

type

不同的 type 值,會顯示不同使用者介面。

類型名稱說明
text預設值,輸入單行文字。
email類似 text 輸入,且帶有瀏覽器上的參數驗證。
password單行輸入,從視覺上來觀察輸入的內容,會被取代成小黑點,以屏蔽輸入的內容。
number單行輸入,且只能是數字。
search用於輸入內容,在瀏覽器中會有刪除按鈕,用於清除輸入的內容。
tel單行輸入,且只能是數字。可用在電話號碼或手機號碼的輸入。
checkbox核取方塊、多選框,可設定該欄位為選取會未選取。
radio選項按鈕、單選按鈕,可設定該欄位為選取會未選取。
file選取檔案來源的使用者介面,加上 accept 可定義檔案來源的類型。
date西元、月、日的使用者介面。
time時間的使用者介面。
datetime-localdatetime 的集合體。
color指定色彩的使用者介面。
range用於水平拖動的使用者介面,加上 minmax 可定義範圍。
button按鈕,加上 value 屬性,可在按鈕上顯示 value 的值。
submit提交表單內容,加上 value 屬性,可在按鈕上顯示 value 的值。
reset表單內容重置為預設值,加上 value 屬性,可在按鈕上顯示 value 的值。

name

用來指定送出去的資料要用什麼名稱,目的是讓遠端伺服器透過明確定義好的名稱去取出對應的欄位值。在前、後端分離的趨勢下,已漸用 JavaScript 直接取到元素的值,已少用 name 來操作了。

html
<input type="text" name="FullName">

value

可以利用此屬性取出使用者所輸入的值,亦可設定該表單元素的預設值。

disabled

禁用狀態。

readonly

唯讀狀態。

required

必填欄位。

html
<input type="text" name="FullName" value="" required>

特定 type 才能使用的屬性

placeholder

顯示輸入的提示訊息。

適用類型:textemailpasswordnumbersearchtel

maxlength、minlength

輸入最多的文字數量、最少需要的文字數量。

適用類型:textemailpasswordsearchtel

小提醒

原始碼呈現水平向右發展可節省文件的行數。若屬性的設定太多,亦會導致原始碼檢視與維護不易。因此,可適時為屬性進行換行保持可維護性。

checked

checked 可以設定 checkboxradio 網頁上初始化的選取狀態。

適用類型:checkboxradio

定義單選的選項按鈕

一個單選的選項按鈕是由多個相同 name 屬性的選項按鈕所組成,也就是群組的概念。一旦單選按鈕群組被建立,選取該群組內的任何一個選項按鈕,也會自動取消同群內內前次被選取的按鈕。

表單驗證只是體驗,不是防線

requiredminlengthtype="email" 這些內建驗證能在送出前擋下明顯的錯誤,讓使用者少跑一趟。但它們全都在瀏覽器端執行,任何人都能繞過,資料的正確性與安全性仍必須由後端把關

常見問題

disabled 和 readonly 有什麼差別?

readonly 的欄位不能編輯,但仍會隨表單送出;disabled 的欄位不能編輯也不會被送出,而且無法用鍵盤聚焦。要讓後端收到值就用 readonly

placeholder 可以取代 label 嗎?

不行。使用者開始輸入後提示就消失了,螢幕閱讀器對它的支援也不一致。placeholder 是補充範例,欄位名稱請一律用 <label>

radio 為什麼點了不會互斥?

同一組單選按鈕要有相同的 name 才會被視為一組。name 不同就是各自獨立的按鈕,自然不會互相取消。

input 需要寫結束標籤嗎?

不需要。它是沒有內容的 空元素,只有一個標籤,也不能包任何內容。

有了瀏覽器內建驗證,還需要後端驗證嗎?

絕對需要。前端驗證只是提升使用體驗,任何人都能繞過它直接送出請求,資料的正確性與安全性仍必須由後端把關。

延伸閱讀