<input type="hidden">

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

型別為 hidden<input> 元素允許 Web 開發人員在提交表單時包含使用者無法看到或修改的資料。例如,當前正在訂購或編輯的內容的 ID,或一個唯一的安全令牌。隱藏輸入在渲染頁面中是完全不可見的,並且無法使其在頁面內容中可見。

注意:inputchange 事件不適用於此輸入型別。隱藏輸入即使使用 JavaScript(例如,hiddenInput.focus())也無法獲得焦點。

<input> 元素的 value 屬性包含一個字串,該字串包含您希望在表單提交到伺服器時包含的隱藏資料。使用者無法透過使用者介面編輯或檢視此內容,但您可以透過瀏覽器開發者工具編輯此值。

警告:儘管該值不會在頁面內容中顯示給使用者,但它可以使用任何瀏覽器的開發者工具或“檢視原始碼”功能進行檢視和編輯。不要依賴 hidden 輸入作為一種安全形式。

附加屬性

除了所有 <input> 元素共有的屬性之外,hidden 輸入還提供以下屬性。

name

這實際上是常見屬性之一,但它對隱藏輸入具有特殊含義。通常,name 屬性在隱藏輸入上的功能與在任何其他輸入上相同。但是,當提交表單時,name 設定為 _charset_ 的隱藏輸入將自動報告其值設定為用於提交表單的字元編碼。

使用隱藏輸入

如上所述,隱藏輸入可以在任何您希望在表單提交到伺服器時包含使用者無法看到或編輯的資料的地方使用。讓我們看一些說明其用法的示例。

跟蹤編輯內容

隱藏輸入最常見的用途之一是跟蹤在提交編輯表單時需要更新的資料庫記錄。典型的工作流程如下:

  1. 使用者決定編輯他們可以控制的一些內容,例如部落格文章或產品條目。他們透過按下編輯按鈕開始。
  2. 要編輯的內容從資料庫中取出並載入到 HTML 表單中,以允許使用者進行更改。
  3. 編輯後,使用者提交表單,更新的資料傳送回伺服器以在資料庫中更新。

這裡的想法是,在步驟 2 中,正在更新的記錄的 ID 儲存在一個隱藏輸入中。當表單在步驟 3 中提交時,ID 會自動與記錄內容一起傳送回伺服器。ID 允許站點的伺服器端元件準確知道需要使用提交的資料更新哪個記錄。

您可以在下面的示例部分中看到這可能是什麼樣子的完整示例。

提高網站安全性

隱藏輸入還用於儲存和提交安全令牌或秘密,以提高網站安全性。基本思想是,如果使用者正在填寫敏感表單,例如銀行網站上的表單以將資金轉賬到另一個賬戶,他們將獲得的秘密將證明他們是他們聲稱的那個人,並且他們正在使用正確的表單提交轉賬請求。

這將阻止惡意使用者建立虛假表單,假裝是銀行,並透過電子郵件將表單傳送給不知情的使用者,誘騙他們將資金轉移到錯誤的地方。這種攻擊被稱為跨站請求偽造 (CSRF);幾乎所有信譽良好的伺服器端框架都使用隱藏的秘密來防止此類攻擊。

注意:將秘密放在隱藏輸入中本身並不能使其安全。金鑰的組成和編碼才能做到這一點。隱藏輸入的值在於它將秘密與資料關聯起來,並在表單傳送到伺服器時自動包含它。您需要使用精心設計的秘密才能真正保護您的網站。

驗證

隱藏輸入不參與約束驗證;它們沒有真正的價值需要約束。

示例

讓我們看看如何實現我們前面描述的編輯表單的一個版本(參見跟蹤編輯內容),使用隱藏輸入來記住正在編輯的記錄的 ID。

編輯表單的 HTML 可能看起來像這樣:

html
<form>
  <div>
    <label for="title">Post title:</label>
    <input type="text" id="title" name="title" value="My excellent blog post" />
  </div>
  <div>
    <label for="content">Post content:</label>
    <textarea id="content" name="content" cols="60" rows="5">
This is the content of my excellent blog post. I hope you enjoy it!
    </textarea>
  </div>
  <div>
    <button type="submit">Update post</button>
  </div>
  <input type="hidden" id="postId" name="postId" value="34657" />
</form>

我們還新增一些 CSS:

css
html {
  font-family: sans-serif;
}

form {
  width: 500px;
}

div {
  display: flex;
  margin-bottom: 10px;
}

label {
  flex: 2;
  line-height: 2;
  text-align: right;
  padding-right: 20px;
}

input,
textarea {
  flex: 7;
  font-family: sans-serif;
  font-size: 1.1rem;
  padding: 5px;
}

textarea {
  height: 60px;
}

伺服器在將表單傳送到使用者瀏覽器之前,會將 ID 為 postID 的隱藏輸入的值設定為其資料庫中帖子的 ID,並在表單返回時使用該資訊來知道要用修改後的資訊更新哪個資料庫記錄。內容中不需要指令碼來處理這個問題。

輸出如下所示

注意:您也可以在 GitHub 上找到該示例(請參閱原始碼,並檢視即時執行)。

提交時,傳送到伺服器的表單資料將看起來像這樣:

title=My+excellent+blog+post&content=This+is+the+content+of+my+excellent+blog+post.+I+hope+you+enjoy+it!&postId=34657

即使隱藏輸入完全不可見,其資料仍然會提交。

技術摘要

表示您希望傳遞迴伺服器的隱藏資料值的字串。
事件 無。
支援的通用屬性 autocomplete
IDL 屬性 value
DOM 介面 HTMLInputElement
方法 無。
隱式 ARIA 角色 沒有對應的角色

規範

規範
HTML
# hidden-state-(type=hidden)

瀏覽器相容性

另見