此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。
HTMLFormElement
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年7月.
HTMLFormElement 接口表示 DOM 中的 <form> 元素。它允许访问和(在某些情况下)修改表单的各个方面,以及访问其组成元素。
实例属性
此接口还从其父接口 HTMLElement 继承属性。
HTMLFormElement.elements只读-
包含所有属于此表单元素的表单控件的
HTMLFormControlsCollection。 HTMLFormElement.length只读-
反映表单中控件的数量的
long值。 HTMLFormElement.name-
反映表单的
nameHTML 属性值的字符串,包含表单的名称。 HTMLFormElement.method-
反映表单的
methodHTML 属性值的字符串,表示用于提交表单的 HTTP 方法。只能设置特定的值。 HTMLFormElement.target-
反映表单的
targetHTML 属性值的字符串,表示用于显示提交表单的结果的位置。 HTMLFormElement.action-
反映表单的
actionHTML 属性值的字符串,包含处理表单提交的信息的程序的 URI。 HTMLFormElement.encoding或HTMLFormElement.enctype-
反映表单的
enctypeHTML 属性值的字符串,表示用于将表单传输到服务器的内容类型。只能设置特定的值。这两个属性是同义词。 HTMLFormElement.acceptCharset-
反映表单的
accept-charsetHTML 属性值的字符串。 HTMLFormElement.autocomplete-
反映表单的
autocompleteHTML 属性值的字符串,表示此表单中的控件是否可以由浏览器自动填充其值。 HTMLFormElement.noValidate-
反映表单的
novalidateHTML 属性值的布尔值,表示是否不应对表单进行验证。
具名输入会被作为属性添加到其所属表单的实例中,且如果它们共享相同的名称(例如,具有名为 action 的输入的表单将使其 action 属性返回该输入,而不是表单的 action HTML 属性)。
实例方法
此接口还从其父接口 HTMLElement 继承方法。
checkValidity()-
如果元素的子控件受到约束验证并满足这些约束,则返回
true;如果某些控件不满足其约束,则返回false。在不满足其约束的任何控件上触发名为invalid的事件;如果未取消事件,则这些控件被视为无效。由程序员决定如何响应false。 reportValidity()-
如果元素的子控件满足其验证约束,则返回
true。当返回false时,将为每个无效的子控件触发可取消的invalid事件,并将验证问题报告给用户。 requestSubmit()-
请求使用指定的提交按钮及其相应的配置来提交表单。
reset()-
将表单重置为其初始状态。
submit()-
将表单提交至服务器。
事件
使用 addEventListener() 或将事件监听器赋值给此接口的 oneventname 属性来监听这些事件。
使用说明
>获得表单元素对象
要获取 HTMLFormElement 对象,你可以使用 CSS 选择器和 querySelector(),或者使用文档的 forms 属性获取文档中所有表单的列表。
Document.forms 返回 HTMLFormElement 对象数组,其中列出了页面上的每个表单。然后,你可以使用以下任何语法来获取单个表单:
document.forms[index]-
返回数组中指定索引(
index)的表单。 document.forms[id]-
返回 ID 为
id的表单。 document.forms[name]-
返回
name属性值为name的表单。
访问表单的元素
你可以通过检查表单的 elements 属性来访问表单中用于包含数据的元素列表。这将返回一个 HTMLFormControlsCollection,其中列出了表单的所有用户数据输入元素,包括 <form> 的后代元素,以及使用其 form 属性而成为表单成员的元素。
你也可以通过将表单元素 name 属性作为 form 的键来获取该表单的元素,但使用 elements 是一个更好的方法——它只包含表单的元素,并且不能与 form 的其他属性混合使用。
元素命名问题
有些名称会干扰 JavaScript 访问表单的属性和元素。
例如:
<input name="id">会优先于<form id="...">。这意味着form.id不会引用表单的 id,而是引用名称为"id"的元素。这也适用于其他表单属性,例如<input name="action">或<input name="post">。<input name="elements">会使表单的elements集合无法访问。引用form.elements现在将引用单个元素。
要避免这些元素名称的问题,你应该:
- 始终使用
elements集合来避免元素名称和表单属性之间的歧义。 - 切勿将
"elements"作为元素名称。
如果你不使用 JavaScript,这不会造成问题。
被视为表单控件的元素
HTMLFormElement.elements 和 HTMLFormElement.length 包含以下元素:
<button><fieldset><input>(但由于历史原因,type为"image"的元素会被忽略)<object><output><select><textarea>
elements 返回的列表不包含其他元素,这使得它成为处理表单时获取最重要元素的绝佳方法。
示例
创建一个新的表单元素,修改其属性,然后提交:
const f = document.createElement("form"); // 创建表单
document.body.appendChild(f); // 将其添加到文档主体
f.action = "/cgi-bin/some.cgi"; // 添加 action 和 method 属性
f.method = "POST";
f.submit(); // 调用表单的 submit() 方法
从 <form> 元素中提取信息并设置一些属性:
<form name="formA" action="/cgi-bin/test" method="post">
<p>点击"信息"以获得表单详细信息,或点击"设置"以改变这些信息。</p>
<p>
<button type="button" onclick="getFormInfo();">信息</button>
<button type="button" onclick="setFormInfo(this.form);">设置</button>
<button type="reset">重置</button>
</p>
<textarea id="form-info" rows="15" cols="20"></textarea>
</form>
<script>
function getFormInfo() {
// 通过表单名称获取对其的引用
const f = document.forms["formA"];
// 我们感兴趣的表单属性
const properties = [
"elements",
"length",
"name",
"charset",
"action",
"acceptCharset",
"action",
"enctype",
"method",
"target",
];
// 迭代这些属性,将它们转换为一个字符串,以便我们可以显示给用户
const info = properties
.map((property) => `${property}:${f[property]}`)
.join("\n");
// 设置表单的 <textarea> 以显示表单的属性
document.forms["formA"].elements["form-info"].value = info; // 也可以使用 document.forms["formA"]['form-info'].value
}
function setFormInfo(f) {
// 参数应该是表单元素的引用。
f.action = "a-different-url.cgi";
f.name = "a-different-name";
}
</script>
在新窗口中提交表单(<form>):
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<title>在新窗口提交表单的示例</title>
</head>
<body>
<form action="test.php" target="_blank">
<p>
<label>名字:<input type="text" name="first-name" /></label>
</p>
<p>
<label>姓氏:<input type="text" name="last-name" /></label>
</p>
<p>
<label><input type="password" name="pwd" /></label>
</p>
<fieldset>
<legend>宠物偏好</legend>
<p>
<label><input type="radio" name="pet" value="cat" />猫</label>
</p>
<p>
<label><input type="radio" name="pet" value="dog" />狗</label>
</p>
</fieldset>
<fieldset>
<legend>拥有的车辆</legend>
<p>
<label
><input type="checkbox" name="vehicle" value="Bike" />自行车</label
>
</p>
<p>
<label
><input type="checkbox" name="vehicle" value="Car" />汽车</label
>
</p>
</fieldset>
<p><button>提交</button></p>
</form>
</body>
</html>
规范
| Specification |
|---|
| HTML> # htmlformelement> |
浏览器兼容性
Enable JavaScript to view this browser compatibility table.
参见
- 实现此接口的 HTML 元素:
<form>。