作为整体的表单
当一个字段被包含在<form>
元素中时,其 DOM 元素会有一个form
属性指向form
的 DOM 元素。<form>
元素则会有一个叫作elements
属性,包含一个类似于数据的集合,其中包含全部的字段。
一个表单字段的name
属性会决定在form
提交时其内容的辨别方式。同时在获取form
的elements
属性时也可以作为一种属性名,所以elements
属性既可以像数组(由编号来访问)一样使用也可以像映射一样访问(通过名字访问)。
<form action="example/submit.html">
Name: <input type="text" name="name"><br>
Password: <input type="password" name="password"><br>
<button type="submit">Log in</button>
</form>
<script>
let form = document.querySelector("form");
console.log(form.elements[1].type);
// → password
console.log(form.elements.password.type);
// → password
console.log(form.elements.name.form == form);
// → true
</script>
type
属性为submit
的按钮在点击时,会提交表单。在一个form
拥有焦点时,点击enter
键也会有同样的效果。
通常在提交一个表单时,浏览器会将页面导航到form
的action
属性指明的页面,使用GET
或POST
请求。但是在这些发生之前,"submit"
事件会被触发。这个事件可以由 JavaScript 处理,并且处理器可以通过调用事件对象的preventDefault
来禁用默认行为。
<form action="example/submit.html">
Value: <input type="text" name="value">
<button type="submit">Save</button>
</form>
<script>
let form = document.querySelector("form");
form.addEventListener("submit", event => {
console.log("Saving value", form.elements.value.value);
event.preventDefault();
});
</script>
在 JavaScript 中submit
事件有多种用途。我们可以编写代码来检测用户输入是否正确并且立刻提示错误信息,而不是提交表单。或者我们可以禁用正常的提交方式,正如这个例子中,让我们的程序处理输入,可能使用fetch
将其发送到服务器而不重新加载页面。