Form表单

摩森特沃 2021年03月24日 422次浏览

声明:本文多处直接引用了文末的参考链接中的内容,如有侵权,请联系删除

表单概述

网站怎样与用户进行交互?答案是使用HTML表单(form)。表单是可以把浏览者输入的数据传送到服务器端,这样服务器端程序就可以处理表单传过来的数据。表单标记以<form>标记开头,以</form>标记结尾。在表单标记中可以定义处理表单数据程序的URL地址等信息。

表单语法

<form  method="post"(规定如何发送表单数据      常用值:get|post)
 action="result.html">(表示向何处发送表单数据)
   <p>  名字:<input name="name" type="text" >  </p>
   <p>  密码:<input name="pass" type="password" >  </p>
   <p>
      <input type="submit" name="Button" value="提交"/>
      <input type="reset" name="Reset" value="重填“/> 
   </p>
</form>

经验:在实际网页开发中通常采用post方式提交表单数据

form标签属性

属性说明
accept-charset规定服务器可处理的表单数据字符集
action规定提交表单时的URL
autocomplete规定是否启用表单的自动完成功能,可选值为:on(默认)和off
enctype规定在发送表单数据之前如何对其进行编码,可选值为:text/plain,multipart/form-data,application/x-www-form-urlencoded(默认)
method规定用于发送 form-data 的 HTTP 方法,可选值为:post和get(默认)
name规定表单的名称
novalidate如果使用该属性,则提交表单时不进行验证,值固定为:novalidate
target规定在何处打开 action URL,可选值为:_blank,_self(默认),_parent,_top,framenam

form表单元素属性

属性说明
type指定元素的类型。text、password、checkbox、radio、submit、reset、file、hidden、image 和 button,默认为 text
name指定表单元素的名称,如果是多个元素,也可以起到分组的作用
value元素的初始值。type 为 radio时必须指定一个值
size指定表单元素的初始宽度。当 type 为 text 或 password时,表单元素的大小以字符为单位。对于其他类型,宽度以像素为单位
maxlengthtype为text 或 password 时,输入的最大字符数
checkedtype为radio或checkbox时,指定按钮是否是被选中

表单元素

文本框-语法

<input type="text"(文本框)  name="userName"(文本框名称) value="用户名"(文本框初始值) size="30"(文本框长度) maxlength="20"(文本框可输入最多字符) />

密码框-语法

<input  type="password "(密码框) name="pass"(密码框的名称)  size="20"(密码框的长度) />

单选按钮-语法

<input name="gen" type="radio"(单选按钮框) value="男"(值)  checked(单选按钮选中状态)  />男
<input name="gen" type="radio" value="女" />女

复选框-语法

<input type="checkbox"(复选框) name="interest" value="sports"(值)/>运动
<input type="checkbox" name="interest" value="talk" checked(复选框选中状态) />聊天
<input type="checkbox" name="interest" value="play"/>玩游戏

列表框-语法

<select(列表框) name="列表名称" size="行数">
<option value="选项的值" selected="selected"(默认选中项)>…</option >
<option(选项) value="选项的值">…</option >
</select>

按钮-语法

  • 使用input的按钮,类型必须为submit,否则起不到提交表单的作用
  • 除使用input(type=submit)按钮之外,还可以在form表单中使用button(type='submit')标签作为按钮,其作用与input(type=submit)作用相同
<input type="reset"(重置按钮) name="butReset"  value="reset按钮"(按钮上显示的文字)>
<input type="submit"(提交按钮) name="butSubmit" value="submit按钮">
<input type="button"(普通按钮) name="butButton" value="button按钮"/>

//图片按钮
 
<input type="image" src="images/login.gif"/(图片路径)>

多行文本域-语法

<textarea(多行文本域) name="showText" cols="x"(显示的列数)  rows="y"(显示的行数)>文本内容 </textarea>

文件域-语法

<form action="" method="post" enctype="multipart/form-data"(表单编码属性)>
  <p><input type="file"(文件域) name="files" />
  <input type="submit" name="upload" value="上传" /></p>
</form>

邮箱-语法

<p>邮箱:<input type="email"(邮箱) name="email"/></p>
<input type="submit"/>

注意:会自动验证Email地址格式是否正确。

网址-语法

<p>请输入你的网址:<input type="url"(网址) name="userUrl"/></p>
<input type="submit"/>

注意:会自动验证URL地址格式是否正确。

数字-语法

<p>请输入数字:<input type="number"(数字) name="num" min="0"(允许的最小值) max="100"(允许的最大值) step(合法的数字间隔)="10"/></p>
<input type="submit"/>

滑块-语法

<p>请输入数字:<input type="range"(滑块) name="range1" min="0"(允许的最小值) max="10"(允许的最大值) step(合法的数字间隔)="2"/></p>
<input type="submit"/>

搜索框-语法

<p>请输入搜索的关键词:<input type="search"(搜索框) name="sousuo"/></p>
<input type="submit"/>

表单的高级应用

隐藏域-语法

<input type="hidden"(隐藏域) value="666" name="userid">

只读和禁用-语法

<input name="name" type="text" value="张三" readonly(只读文本框)>
<input type="submit" disabled(禁用) value="保存" >

表单元素的标注

  • 增强鼠标的可用性
  • 自动将焦点转移到与该标注相关的表单元素上

语法

<label for="id"(表单元素的id)>标注的文本</label>
<input type="radio" name="gender" id="male(表单元素id)"/>

表单的初级验证

表单验证的好处

  • 减轻服务器的压力
  • 保证数据的可行性和安全性

表单初级验证的方法

placeholder

  • input类型的文本框提供一种提示(hint)
  • 可以描述文本框期待用户输入何种内容
  • 提示语默认显示,当文本框中输入内容时提示语消失
  • 适合于input标签:text、search、url、email和password等类型

语法:

<input type="search" name="sousuo" placeholder(文本框输入内容提示)="请输入要搜索的关键字"/>

required

  • 规定文本框填写内容不能为空,否则不允许用户提交表单
  • 适合于input标签:text、search、url、email、password、number、checkbox、radio、file等类型

语法:

<input type="text" name="username" required(必填项)/>

pattern

用户输入的内容必须符合正则表达式所指的规则,否则就不能提交表单
语法:

<input type="text" name="tel" required pattern(验证规则,正则表达式)="^1[358]\d{9}" />

表达的提交与重置

form表单的提交与重置可以通过HTML自带的表单按钮方式,或者使用JavaScript脚本的方式。

使用表单按钮

<form id="form1" name="myForm" method="post" action="action.html" target="_blank">
    <input type="submit" value="提交"/>
    <input type="reset" value="重置"/>
</form>

使用JavaScript脚本

使用JavaScript脚本提交form表单

//提交表单
myForm.method = 'POST';
myForm.action = "action.html";
myForm.submit();

使用JavaScript脚本重置form表单

//重置表单
document.getElementsByName("myForm")[0].reset();

示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>使用JavaScript脚本实现form表单的提交与重置</title>
    <meta name="author" content="pan_junbiao的博客">
</head>
<body>
    <form name="myForm">
        <table align="center">
            <caption>用户注册</caption>
            <tr>
                <td>博客信息:</td>
                <td>
                    <label>您好,欢迎访问 pan_junbiao的博客</label>
                </td>
            </tr>
            <tr>
                <td>博客地址:</td>
                <td>
                     <label>https://blog.csdn.net/pan_junbiao</label>
                </td>
            </tr>
            <tr>
                <td>登录账户:</td>
                <td>
                   <input type="text" name="loginName" />
                </td>
            </tr>
            <tr>
                <td>登录密码:</td>
                <td>
                    <input type="password" name="loginPwd" />
                </td>
            </tr>
            <!-- 以下是提交、取消按钮 -->
            <tr>
                <td colspan="2" style="text-align: center; padding: 5px;">
                    <input type="button" value="提交" onclick="submitFrom()"/>
                    <input type="button" value="重置" onclick="resetFrom()"/>
                </td>
            </tr>
        </table>
    </form>
</body>
<script>
    //提交
    function submitFrom() {
        //验证数据
        if(!myForm.loginName.value) {
            alert("请输入登录账户!");
            myForm.loginName.focus();
            return;
        }
        if(!myForm.loginPwd.value) {
            alert("请输入登录密码!");
            myForm.loginPwd.focus();
            return;
        }
        //提交表单
        myForm.method = 'POST';
        myForm.action = "action.html";
        myForm.submit();
    }
 
    //重置
    function resetFrom() {
        //重置表单
        document.getElementsByName("myForm")[0].reset();
    }
</script>
</html>

注意:使用JavaScript脚本实现form表单的提交与重置时,按钮是普通按钮:type="button"。

form表单提交前自定义数据校验

当我们在提交form表单前,需要对表单的数据进行有效性校验。下面将介绍如何使用JavaScript实现对form表单提交前的数据校验。

方式一:使用form表单的 onsubmit 提交事件。

注意:

  • 登录按钮的类型必须是:type="submit"
  • 提交方法是写在form元素的 onsubmit 提交事件上,注意方法的命名不能使用submit,否则会导致事件不会触发
  • 由于方法内部的return false无法传递到form表单中,导致不能阻止表单的提交,所以在onsubmit中必须加上 return
<form action="action.html" method="post" name="myForm" onsubmit="return SubmitLogin()">
</form>

完整代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录</title>
    <meta name="author" content="pan_junbiao的博客">
</head>
<body>
<div align="center">
    <form action="action.html" method="post" name="myForm" onsubmit="return SubmitLogin()">
        <table>
            <caption>请输入登录信息</caption>
            <tr>
                <td>博客信息:</td>
                <td>
                    <label>您好,欢迎访问 pan_junbiao的博客</label>
                </td>
            </tr>
            <tr>
                <td>博客地址:</td>
                <td>
                    <label>https://blog.csdn.net/pan_junbiao</label>
                </td>
            </tr>
            <tr>
                <td>登录账户:</td>
                <td>
                    <input type="text" name="loginName" />
                </td>
            </tr>
            <tr>
                <td>登录密码:</td>
                <td>
                    <input type="password" name="loginPwd" />
                </td>
            </tr>
            <!-- 以下是提交、取消按钮 -->
            <tr>
                <td>
                    <input type="submit" value="登录"/>
                </td>
                <td>
                    <input type="reset" value="取消"/>
                </td>
            </tr>
        </table>
        <span id="tips" style="color: red; font-weight: bold"></span>
    </form>
</div>
</body>
<script>
    //提交登录
    function SubmitLogin() {
        let tips = document.getElementById("tips");
        //判断用户名是否为空
        if (!myForm.loginName.value) {
            tips.innerText = "请输入登录账户!"
            myForm.loginName.focus();
            return false;
        }
        //判断密码是否为空
        if (!myForm.loginPwd.value) {
            tips.innerText = "请输入登录密码!"
            myForm.loginPwd.focus();
            return false;
        }
        //校验成功
        return true;
    }
</script>
</html>

方式二:使用普通按钮的 onclick 点击事件

注意:

  • 登录按钮的类型必须是:type="button"
  • 提交方法是写在按钮的 onclick 点击事件上

完整代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录</title>
    <meta name="author" content="pan_junbiao的博客">
</head>
<body>
<div align="center">
    <form action="action.html" method="post" name="myForm">
        <table>
            <caption>请输入登录信息</caption>
            <tr>
                <td>博客信息:</td>
                <td>
                    <label>您好,欢迎访问 pan_junbiao的博客</label>
                </td>
            </tr>
            <tr>
                <td>博客地址:</td>
                <td>
                    <label>https://blog.csdn.net/pan_junbiao</label>
                </td>
            </tr>
            <tr>
                <td>登录账户:</td>
                <td>
                    <input type="text" name="loginName" />
                </td>
            </tr>
            <tr>
                <td>登录密码:</td>
                <td>
                    <input type="password" name="loginPwd" />
                </td>
            </tr>
            <!-- 以下是提交、取消按钮 -->
            <tr>
                <td>
                    <input onclick="SubmitLogin()" type="button" value="登录"/>
                </td>
                <td>
                    <input type="reset" value="取消"/>
                </td>
            </tr>
        </table>
        <span id="tips" style="color: red; font-weight: bold"></span>
    </form>
</div>
</body>
<script>
    //提交登录
    function SubmitLogin() {
        let tips = document.getElementById("tips");
        //判断用户名是否为空
        if (!myForm.loginName.value) {
            tips.innerText = "请输入登录账户!"
            myForm.loginName.focus();
            return;
        }
        //判断密码是否为空
        if (!myForm.loginPwd.value) {
            tips.innerText = "请输入登录密码!"
            myForm.loginPwd.focus();
            return;
        }
        //提交表单
        myForm.submit();
    }
</script>
</html>

扩展内容

使用FormData对象构造表单

  • 详细内容可以参考这里

构造函数

  • FormData()

参数:

  • form:可选参数,表示一个HTML上的<form>表单元素,当传入 form 后,创建的 FormData 对象会自动将 form 中的表单值也包含进去,包括文件内容也会被编码之后包含进去
    注意:当传入 form 参数时,所有的输入元素都需要有 name 属性,否则无法访问到值

FormData遍历

  • 可以直接在for...of结构中使用,而不需要调用entries() : for (var p of myFormData) 的作用和 for (var p of myFormData.entries()) 是相同的

常用方法

  • append():添加一个新值到 FormData 对象内的一个已存在的键中,如果键不存在则会添加该键

参数:

  • name:value对应的键名
  • value:表单的值,可以是字符串或 Blob (包括子类型,如 File)
  • filename:传给服务器的文件名称, 当第二个参数传递的是一个 Blob 对象或者 File 对象,Blob 对象的默认文件名是 "blob",File 对象的默认文件名是该文件的名称

返回值:空

  • set():对 FormData 对象里的某个 key 设置一个新的值,如果该 key 不存在,则添加

参数:

  • name:要设置的键名
  • value:字段的值,可以是字符串或 Blob (包括子类型,如 File)
  • filename:传给服务器的文件名称, 当第二个参数传递的是一个 Blob 对象或者 File 对象,Blob 对象的默认文件名是 "blob",File 对象的默认文件名是该文件的名称

返回值:空

  • delete():从 FormData 对象中删除指定键,即 key,和它对应的值,即 value

参数:

  • 要删除的键(Key)的名字

返回值:空

  • entries():返回一个 iterator 对象 ,此对象可以遍历访问 FormData 中的键值对。其中键值对的 key 是一个字符串;value 是一个字符串, 或者 Blob 对象

返回值:iterator

  • get():返回 FormData 对象中和指定的键关联的第一个值

参数:

  • name:要获取值的键名

返回值:键值

  • getAll():返回该 FormData 对象指定 key 的所有值

参数:

  • name:要获取值的键名

返回值:键值数组

  • has():返回一个布尔值,表示该 FormData 对象是否含有某个 key

参数:

  • name:查询的键名

返回值:true or false

  • keys():返回一个 iterator,遍历了该 formData 包含的所有key

返回值:键值数组

  • values():返回一个允许遍历该对象中所有值的 iterator,这些值是字符串或是Blob 对象

返回值:键值数组

引用参考