这是我参与8月更文挑战的第31天,活动详情查看:8月更文挑战
前言
吃饱饭才有力气写代码~
今天学一学表单~JavaScript较早的一个用途是承担一部分服务器端的表单处理的责任。由于不能直接使用表单解决问题,因此开发者不得不用JavaScript既做表单验证,又用于增强标准表单控件的默认行为。
表单基础
Web表单在HTML中用
<form>
表示,在JavaScript中则以HTMLFORMElement类型表示;它继承于HTMLElement类型,所以有与其它HTML元素一样的默认属性,此外它也有一些自己特有的属性和方法:
- acceptCharset: 服务器可以接收的字符集,等价于HTML的accept-charset属性
- action: 请求的URL,等价于HTML的action属性
- elements: 表单中所有控件的HTMLCollection
- enctype: 请求的编码类型,等价于HTML的enctype属性
- length: 表单中控件的数量
- method: HTTP请求的方法类型,通常是get或者是post,等价于HTML的target属性
- name: 表单的名字,等价于HTML的name属性
- reset(): 把表单字段重置为各自的默认值
- submit(): 提交表单
- target: 用于发送请求和接收响应的窗口的名字,等价于HTML的target属性
最常用的取得对表单元素的引用的方法:
把表单当作普通元素为它指定一个id属性,从而可以使用getElementById()来获取表单;
let form = document.getElementById("form1");
此外还可以使用document.forms集合可以获取页面上所有的表单元素,然后进一步使用数字索引或表单中的名字来访问特定的表单,比如:
let firstForm = document.forms[0];
let secondForm = document.forms["form2"];
提交表单
表单是通过用户点击提交按钮或图片按钮的方式提交的,提交按钮可以使用type属性为"submit"的input 或 button 元素来定义,图片按钮可以使用type属性为"image"的input元素来定义。
<input type = "submit" value = "Submit Form">
<button type = "submit">Submit Form</button>
<input type = "image" src = "gaoxiao.gif">
以这种方式提交表单会在向服务器发送请求之前触发submit事件,这样就提供了一个验证表单数据的机会,可以根据验证结果决定是否真的提交,阻止这个事件的默认行为可以取消提交表单:
let form = document.getElementById("form1");
form.addEventListener("submit",(event)=>{
event.preventDefault();
})
调用preventDefault()方法可以阻止表单提交,通常在表单数据无效以及不应该发送到服务器时可以这样处理。
当然也可以在JavaScript中用submit()方法提交表单,可以在任何时候调用这个方法提交,而且就算表单中不存在提交按钮也不影响提交:
let form = document.getElementById("form1");
form.submit();
通过submit()提交表单时submit事件不会触发,所以要在调用这个方法之前做数据验证。
注意
表单提交的最大问题就是可能会重复提交,如果提交表单之后没有什么反应,那么有些人可能会多次点击提交按钮,结果可能造成服务器重复处理请求,甚至可能比如说用户在购物造成多次下单;解决这个问题的方法主要有两种:
- 在表单提交后禁用提交按钮
- 通过onsubmit事件处理程序消失之后的表单提交