HTMLFormElement: elements 屬性

Baseline 已廣泛支援

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

HTMLFormElement 介面的 elements 屬性會返回一個 HTMLFormControlsCollection,其中列出了與 <form> 元素相關的所有表單控制元件。

您可以透過索引或元素的 nameid 屬性來訪問返回集合中的特定表單控制元件。

在 HTML5 之前,返回的物件是一個 HTMLCollection,而 HTMLFormControlsCollection 是基於它的。

獨立地,您可以使用 length 屬性獲取相關表單控制元件的數量。您可以使用文件的 forms 屬性來獲取給定文件中所有表單的列表。

一個包含所有與表單相關的非影像控制元件的 HTMLFormControlsCollection。這是一個即時集合;如果表單控制元件與表單相關聯或與之解除關聯,該集合將更新以反映更改。

返回集合中的表單控制元件的順序與它們在文件中出現的順序相同,遵循樹的先序深度優先遍歷。這被稱為樹序

僅返回以下表單控制元件:

示例

快速語法示例

在此示例中,我們將展示如何獲取表單控制元件列表,以及如何透過索引和名稱或 ID 訪問其成員。

html
<form id="my-form">
  <label>
    Username:
    <input type="text" name="username" />
  </label>
  <label>
    Full name:
    <input type="text" name="full-name" />
  </label>
  <label>
    Password:
    <input type="password" name="password" />
  </label>
</form>
js
const inputs = document.getElementById("my-form").elements;
const inputByIndex = inputs[0];
const inputByName = inputs["username"];

關聯的表單控制元件

此示例演示了 HTMLFormControlsCollection 如何包含與表單關聯的表單控制元件,而不是物理巢狀在 <form> 中的控制元件。

第一個表單是完整的,有四個表單控制元件:一個 <fieldset> 和三個 <input> 元素。<legend><label> 元素不是列表中的表單控制元件。第二個表單是稀疏的,只有一個巢狀的表單控制元件:一個單獨的 <object> 元素。完整表單中的所有表單控制元件都透過其 form 屬性與稀疏表單相關聯。

html
<form id="fullForm">
  This form looks full, but it has no associated form controls
  <fieldset form="sparseForm">
    <legend>This is a legend</legend>
    <label>A form control: <input form="sparseForm" /></label>
    <label>Another form control: <input form="sparseForm" /></label>
    <label>Yet another form control: <input form="sparseForm" /></label>
  </fieldset>
</form>

<form id="sparseForm">
  <object>Lone form control</object>
</form>

我們使用 elements 屬性來獲取每個表單的 HTMLFormControlsCollection

js
const sparse = document.getElementById("sparseForm").elements;
const full = document.getElementById("fullForm").elements;

該集合包括表單元素的關聯表單控制元件,即與表單關聯的所有 <button><fieldset><input><object><output><select><textarea> 和與表單關聯的自定義元素,即使這些元素巢狀在另一個表單中,或者未巢狀在任何表單中。

js
console.log(`sparse form: ${sparse.length}`); // sparse form: 5
console.log(`full form: ${full.length}`); // full form: 0

集合中的表單控制元件與它們在文件中出現的順序相同。

js
console.log(`first member: ${sparse[0].tagName}`); // first member: FIELDSET
console.log(`last member: ${sparse[sparse.length - 1].tagName}`); // last member: OBJECT

訪問表單控制元件

此示例獲取表單的元素列表,然後遍歷列表,查詢型別為 "text"<input> 元素,以便對它們執行某種形式的處理。

js
const inputs = document.getElementById("my-form").elements;

// Iterate over the form controls
for (const input of inputs) {
  if (input.nodeName === "INPUT" && input.type === "text") {
    // Update text input
    input.value = input.value.toLocaleUpperCase();
  }
}

停用表單控制元件

js
const inputs = document.getElementById("my-form").elements;

// Iterate over the form controls
for (const input of inputs) {
  // Disable all form controls
  input.setAttribute("disabled", "");
}

規範

規範
HTML
# dom-form-elements-dev

瀏覽器相容性