HTML 表单
HTML 的 <form>
元素和各式各样的表单输入元素在客户端编程中有着重要地位,这些 HTML 元素的历史甚至比 JavaScript 本身更早,是第一代 Web 应用程序背后的运作机制:用户输入从表单元素收集,表单将这些输入提交给服务器,服务器处理输入并生成一个新的 HTML 页面显示在客户端。
以下是常见的 HTML 表单元素:
HTML元素 | 类型属性 | 事件处理属性 | 描述和事件 |
---|---|---|---|
<input type="button"> 或<button type="button"> |
button | onclick | 按钮 |
<input type="checkbox"> |
checkbox | onchange | 复选按钮 |
<input type="file"> |
file | onchange | 文件上传,它的value是只读的 |
<input type="hidden"> |
hidden | 隐藏字段 | |
<option> |
select对象中的单个选项,事件处理属性和value都在select对象上 | ||
<input type="password"> |
password | onchange | 密码输入框 |
<input type="radio"> |
radio | onchange | 单选按钮 |
<input type="reset"> 或<button type="reset"> |
reset | onclick | 重置按钮 |
<select> |
select-one | onchange | 单选下拉列表 |
<select multiple> |
select-multiple | onchange | 多选下拉列表 |
<input type="submit"> 或<button type="submit"> |
submit | onclick | 提交按钮 |
<input type="text"> |
text | onchange | 单行文本输入框 |
<textarea> |
textarea | onchange | 多行文本输入域 |
选取表单和表单元素
前面介绍的通过 DOM API 获取元素的所有方法都适用于表单及其所包含的元素:
document.getElementById("address").getElementsByTagName("input");
document.querySelectorAll('#shipping input[type="radio"]');
document.querySelectorAll('#shipping input[type="radio"][name="method"]');
有 name
或 id
属性的 <form>
元素可以直接通过如下方式获取:
window.address
document.address
document.forms[0].address
document.forms[0]
document.forms[0].address[0]
document.address.street
document.forms[0].address.elements[0]
document.forms[0].address.elements.street
但不推荐使用这种方式,推荐使用 DOM API。
表单和元素的属性
在 JavaScript 出现之前,需要一个专门的「提交」按钮来提交表单,一个专门的「重置」按钮来重置表单所有元素的值,JavaScript 的 Form 对象支持两个方法:submit()
和 reset()
,分别用于提交和重置表单元素值。
所有表单元素都有以下属性:
- type:标识表单类型的只读属性
- form:所属 Form 对象的只读引用
- name:对应元素的
name
只读属性 - value:可读/写属性,指定表单元素或所代表的值
表单和元素的事件处理程序
每个表单都有一个 onsubmit 事件处理程序来侦测表单提交,还有一个 onreset 事件处理程序来侦测表单重置,这些事件处理程序会在点击「提交」或「重置」按钮时触发执行。
当用户与表单元素交互时往往会触发 click
或 change
事件,通过定义 onclick
或 onchange
事件处理程序可以处理这些事件。一般来说,点击按钮会触发 click
事件,而改变表单元素值则会触发 change
事件,这里面需要注意的是,当用户在一个文本域中输入时,不是每次输入都会触发 change
事件,而是输入完成将焦点移到其他元素时才会触发。
表单元素在获得键盘焦点时会触发 focus
事件,失去焦点时会触发 blur
事件。
按钮
按钮是最常用的表单元素之一,本身没有默认行为,除非它有 onclick
事件处理程序,否则没有什么用处。
提交和重置元素本就是按钮,只不过它们有与之关联到默认动作,如果 onclick
事件处理程序返回 false
,这些按钮的默认动作就不执行了。可以使用 onclick
事件处理程序来执行表单校验,但通常使用的 是 Form 对象本身的 onsubmit
事件处理程序来执行表单校验。
开关按钮
复选框和单元框是开关按钮,通过对其单击用户可以改变它的开关状态,单选框返回的是单一值,而复选框返回的是类数组对象,单选和复选框都定义了 checked
属性,指定了元素当前是否选中。
用户勾选单选框或复选框,会触发 onclick
事件,如果勾选导致状态改变,也会触发 onchange
事件。
文本域
文本输入域在 HTML 表单和 JavaScript 程序中可能是最常用的元素。这里的文本输入域包含单行文本输入框(<input type="text">
),也包含多行文本输入域(<textarea>
)。value
属性表示用户输入的文本,通过设置该属性值可以显式指定应该在输入域中显示的文本,在 HTML 5 中还可以通过 placeholder
属性指定用户输入前在输入域中显示的提示信息:
到达日期:<input type="text" name="arrival" placeholder="2018-09-01">
文本输入域的 onchange
事件处理程序会在用户完成编辑并将焦点移出时触发。
<input type="password">
元素在用户输入时显示为星号,用于输入密码时不被别人看到。
<input type="file">
元素文件上传,其 value
是只读属性。
还可以为文本输入域定义 onkeypress
、onkeydown
和 onkeyup
等事件处理程序,用于实现更加个性化的需求。
下拉列表和选项元素
Select 元素表示用户可以做出选择的一组选项(用 Option 表示),浏览器通常将其渲染为下拉菜单的形式。
Select 元素能以两种不同的方式运作:单选和多选,这取决于 type
属性值如何设置。如果 <select>
元素有 multiple
属性,也就是 type
属性值为 select-mulitple
,那就允许用户选择多个选项,否则,只能选择单个选项,对应的 type
属性值为 select-one
。
当用户选取或取消选取一个选项时,会触发 onchange
事件处理程序,如果是单选,可以通过 Select 对象的 selectedIndex
属性指定哪个选项被选中,如果是多选,需要遍历 options
数值,检测Option 对象的 selected
属性值。
除了 selected
属性,每个 Option 对象还有一个 text
属性,用于指定该选项所显示的纯文本字符串,该属性是个可读/写属性,此外,该对象还有 value
属性,指定提交到服务器的选项值。
注:Option 对象本身没有任何与表单相关的事件处理程序,只能通过 Select 对象的事件处理程序来代替。
此外,由于历史原因,options
属性也可用来动态改变 Select 元素中的选项,比如通过 options.length
来控制选项数,设置 options
数组中某个索引的值为 null
可以删除该 Option 对象。我们还可以通过 options
数组动态为 Select 元素新增选项:
// 创建一个新的选项
var china = new Option("中国", // text属性
"china", // value属性
false, // defaultSelected属性
fasle); // selected属性
// 将新选项添加到 options 数组中,在 Select 元素中显示
var countries = document.address.country; // 获取 Select 对象
countries.options[countries.options.length] = china;
当然,这些方法已经很古老了,不推荐使用,最好还是通过标准的 DOM API 来实现这些元素节点的新增和插入。
无评论