表单基础知识
form元素在 DOM 中的对应类型是:HTMLFormElement;HTMLFormElement继承自HTMLElement,因此与其他 HTML 元素具有相同的默认属性和方法;HTMLFormElement扩展的独有属性acceptCharset等价于表单元素的accept-charset特性action:URL 等价于action特性elements:表单中所有 控件 的集合enctype:请求的编码类型 等价于enctype特性length:表单控件的数量method:HTTP请求类型 等价于method特性name等价于name特性target:取得目标窗口或框架的名称 等价于target特性
HTMLFormElement扩展的独有方法reset()submit()checkValidity()
获取(引用)表单元素的方式
getElementById()document.forms取得页面中的所有表单,再通过索引或name特性来取得特定的表单// 取得页面中的表单集合 var forms = document.forms; // 取得页面中的第一个表单元素 var firstForm = forms[0]; // 取得页面中 name 为 form2 的表单元素 var secondForm = forms['form2'];
提交表单
提交表单可能出现的最大问题是:重复提交表单。
- 第一次提交表单时禁用表单按钮(为提交按钮添加
disabled特性) - 利用
onsubmit事件处理程序取消后续的表单提交操作
不要通过检测 submit 按钮的点击事件来处理表单提交
不同浏览器的
submit和click事件触发的先后顺序存在差异
通过 HTML 进行提交
input元素,type为submitinput元素,type为image(图像按钮)button元素,type为submit注意:只要表单(
form)上存在以上任何一种按钮,那么在相应表单控件拥有焦点(textarea例外)的情况下,按下回车键就会进行表单提交;以 HTML 的方式提交表单时,浏览器会在将请求发送给服务器之前在对应的表单对象上触发
submit事件;由于第 2 点提到的特性,我们可以有机会在浏览器发送表单之前验证表单数据,并决定是否阻止表单(
return false)的提交。
var form = document.getElementById('myForm');
eventUtil.addEventHandler(form, 'submit', function(event) {
event = eventUtil.getEvent(event);
if (...) {
event.preventDefault(event);
}
})
通过 JS 进行提交。
通过调用表单对象的 submit() 方法进行提交。
- 在以调用
submit()方法的形式提交表单时,不会触发submit事件;因此记得在调用此方法之前验证表单数据
重置表单
使用
HTML来重置表单input元素 --type为resetbutton元素 --type为reset
使用 JS 来重置表单:利用表单对象的
reset()方法;使用 HTML 或 JS 重置表单都会触发
reset事件;慎用表单重置功能。
表单字段
访问表单元素的方法
- DOM 方法获取
- 表单对象的
elements元素集合的索引或name获取通过表单对象的
elements序列的name特性来获取到的表单元素可能是NodeList。 因为同一个表单中可能存在多个name相同元素
1. 共有的表单字段属性
disabled:布尔值,可写,是否禁用表单元素form:指向字段所属的表单对象namereadOnly:是否只读tabIndex:tab序号typevalue
可以通过 JS 动态修改以上除
form外的所有属性;特殊的注意点
- 文件控件的
Value是只读的 select空间的type属性是只读的
- 文件控件的
2. 共有的表单字段方法
focus():设置焦点,激活该控件blur():取消焦点
表单元素在以下情况使用
focus()方法会出错input的type为hidden- 表单元素的样式
display为none - 表单元素的样式
visibility为hidden
HTML 5 为表单字段新增了
autofocus特性,用于页面载入时表单元素的自动聚焦。
3. 共有的表单字符方法
blurchangefocus
change事件触发的时间input或者textarea元素 失去焦点 且value改变 时触发select元素变更了选择项时立即触发change事件处理程序常用于验证用户在字段中输入的数据;focus和blur事件变更输入框的背景颜色可以提升用户体验blur和change事件在不同的浏览器下触发的顺序不同。