Web前端:HTML篇(七)表单

表单

HTML 表单用于收集用户的输入信息。

HTML 表单表示文档中的一个区域,此区域包含交互控件,将用户收集到的信息发送到 Web 服务器。

HTML 表单通常包含各种输入字段、复选框、单选按钮、下拉列表等元素。

以下是一个简单的HTML表单的例子:

  • <form> 元素用于创建表单,action 属性定义了表单数据提交的目标 URL,method 属性定义了提交数据的 HTTP 方法(这里使用的是 "post")。
  • <label> 元素用于为表单元素添加标签,提高可访问性。
  • <input> 元素是最常用的表单元素之一,它可以创建文本输入框、密码框、单选按钮、复选框等。type 属性定义了输入框的类型,id 属性用于关联 <label> 元素,name 属性用于标识表单字段。
  • <select> 元素用于创建下拉列表,而 <option> 元素用于定义下拉列表中的选项。

表单是一个包含表单元素的区域。

表单元素是允许用户在表单中输入内容,比如:文本域(textarea)、下拉列表(select)、单选框(radio-buttons)、复选框(checkbox) 等等。

我们可以使用 <form> 标签来创建表单:

html 复制代码
<form action="/" method="post">
    <!-- 文本输入框 -->
    <label for="name">用户名:</label>
    <input type="text" id="name" name="name" required>

    <br>

    <!-- 密码输入框 -->
    <label for="password">密码:</label>
    <input type="password" id="password" name="password" required>

    <br>

    <!-- 单选按钮 -->
    <label>性别:</label>
    <input type="radio" id="male" name="gender" value="male" checked>
    <label for="male">男</label>
    <input type="radio" id="female" name="gender" value="female">
    <label for="female">女</label>

    <br>

    <!-- 复选框 -->
    <input type="checkbox" id="subscribe" name="subscribe" checked>
    <label for="subscribe">订阅推送信息</label>

    <br>

    <!-- 下拉列表 -->
    <label for="country">国家:</label>
    <select id="country" name="country">
        <option value="cn">CN</option>
        <option value="usa">USA</option>
        <option value="uk">UK</option>
    </select>

    <br>

    <!-- 提交按钮 -->
    <input type="submit" value="提交">
</form>

用Flask获取表单:

你可以通过对应的后端框架来获取这个表单的内容,下面用Py的Flask来举例子。下面创建一个py文件,同目录下创建一个名叫templates的文件夹。

HTML 文件保存在 templates 文件夹中,命名为 test.html。Flask 默认会在 templates 文件夹中查找 HTML 文件。

python 复制代码
from flask import Flask, request, render_template  # 导入 Flask 框架及其所需的模块  

app = Flask(__name__)  # 创建 Flask 应用实例  

@app.route('/', methods=['GET', 'POST'])  # 定义路由,支持 GET 和 POST 请求  
def form():  # 定义处理表单的视图函数  
    if request.method == 'POST':  # 检查请求方法是否为 POST  
        # 获取表单数据  
        name = request.form.get('name')  # 获取用户名  
        password = request.form.get('password')  # 获取密码  
        gender = request.form.get('gender')  # 获取性别  
        subscribe = request.form.get('subscribe')  # 获取订阅复选框值,可能不存在  
        country = request.form.get('country')  # 获取国家  

        # 处理获取的数据,例如返回显示  
        return f'''  
            <h1>提交的信息:</h1>  
            <p>用户名: {name}</p>  # 显示用户名  
            <p>密码: {password}</p>  # 显示密码  
            <p>性别: {gender}</p>  # 显示性别  
            <p>订阅推送信息: {"是" if subscribe else "否"}</p>  # 判断订阅状态并显示  
            <p>国家: {country}</p>  # 显示选择的国家  
        '''  
    
    # 如果是 GET 方法,渲染表单  
    return render_template('test.html')  # 返回表单的 HTML 模板  

if __name__ == '__main__':  # 判断是否作为主程序运行  
    app.run(debug=True)  # 启动 Flask 应用,并开启调试模式

注意:在 Python 代码中,获取表单数据的部分是通过 request.form.get('field_name') 来实现的,其中 field_name 对应于 HTML 表单中各个输入元素的 name 属性。

如:

用户名:

  • Python: name = request.form.get('name')
  • HTML: <input type="text" id="name" name="name" required>

HTML 表单 - 输入元素

多数情况下被用到的表单标签是输入标签 <input>。

输入类型是由 type 属性定义。

接下来我们介绍几种常用的输入类型。


文本域(Text Fields)

文本域通过 <input type="text"> 标签来设定,当用户要在表单中键入字母、数字等内容时,就会用到文本域。

html 复制代码
<form>
First name: <input type="text" name="firstname"><br>
Last name: <input type="text" name="lastname">
</form>

**注意:**表单本身并不可见。同时,在大多数浏览器中,文本域的默认宽度是 20 个字符。


密码字段

密码字段通过标签 <input type="password"> 来定义:

html 复制代码
<form>
Password: <input type="password" name="pwd">
</form>

**注意:**密码字段字符不会明文显示,而是以星号 * 或圆点 . 替代。


单选按钮(Radio Buttons)

<input type="radio"> 标签定义了表单的单选框选项:

html 复制代码
<form action="">
<input type="radio" name="sex" value="male">男<br>
<input type="radio" name="sex" value="female">女<br>
<input type="radio" name="sex" value="Agender">无性别<br>
<input type="radio" name="sex" value="Lesbian">女同<br>
<input type="radio" name="sex" value="Gay">男同<br>
<input type="radio" name="sex" value="Bisexual">两性恋<br>
<input type="radio" name="sex" value="Transgender">跨性别者<br>
<input type="radio" name="sex" value="111">武装直升机
</form>

复选框(Checkboxes)

<input type="checkbox"> 定义了复选框。

复选框可以选取一个或多个选项:

html 复制代码
<form>
<input type="checkbox" name="vehicle[]" value="Bike">我喜欢自行车<br>
<input type="checkbox" name="vehicle[]" value="Car">我喜欢小汽车
</form>

提交按钮(Submit)

<input type="submit"> 定义了提交按钮。

当用户单击确认按钮时,表单的内容会被传送到服务器。表单的动作属性 action 定义了服务端的文件名。

action 属性会对接收到的用户输入数据进行相关的处理:

html 复制代码
<form name="input" action="html_form_action.php" method="get">
Username: <input type="text" name="user">
<input type="submit" value="Submit">
</form>

选择框

如何使用隐藏在下拉列表中的默认空白值实现SELECT标记

只需使用禁用和/或隐藏属性:

html 复制代码
<form>
  <select>
    <option selected disabled hidden style="display: none" value=""></option>
    <option value="volvo">Volvo</option>
    <option value="saab">Saab</option>
    <option value="fiat">Fiat</option>
    <option value="audi">Audi</option>
 </select>
</form>
  • selected:使此选项成为默认选项。
  • disabled:使此选项无法点击。
  • style="display:none":使此选项不在旧版浏览器中显示。
  • hidden:使此选项不显示在下拉列表中。

<label>标签

我最前面的实例中比后面单独的例子多了 <label>标签。

将一个 <label> 和一个 <input> 元素相关联主要有这些优点:

  • 标签文本不仅与其相应的文本输入元素在视觉上相关联,程序中也是如此。这意味着,当用户聚焦到这个表单输入元素时,屏幕阅读器可以读出标签,让使用辅助技术的用户更容易理解应输入什么数据。
  • 你可以点击关联的标签来聚焦或者激活这个输入元素,就像直接点击输入元素一样。这扩大了元素的可点击区域,让包括使用触屏设备在内的用户更容易激活这个元素。

将一个 <label> 和一个 <input> 元素匹配在一起,你需要给 <input> 一个 id 属性。而 <label> 需要一个 for 属性,其值和 <input>id 一样。

另外,也可以将 <input> 直接放在 <label> 里,此时则不需要 forid 属性,因为关联已隐含存在。

相关推荐
懒大王爱吃狼29 分钟前
Python教程:python枚举类定义和使用
开发语言·前端·javascript·python·python基础·python编程·python书籍
逐·風4 小时前
unity关于自定义渲染、内存管理、性能调优、复杂物理模拟、并行计算以及插件开发
前端·unity·c#
Devil枫5 小时前
Vue 3 单元测试与E2E测试
前端·vue.js·单元测试
尚梦6 小时前
uni-app 封装刘海状态栏(适用小程序, h5, 头条小程序)
前端·小程序·uni-app
GIS程序媛—椰子6 小时前
【Vue 全家桶】6、vue-router 路由(更新中)
前端·vue.js
前端青山6 小时前
Node.js-增强 API 安全性和性能优化
开发语言·前端·javascript·性能优化·前端框架·node.js
毕业设计制作和分享7 小时前
ssm《数据库系统原理》课程平台的设计与实现+vue
前端·数据库·vue.js·oracle·mybatis
清灵xmf9 小时前
在 Vue 中实现与优化轮询技术
前端·javascript·vue·轮询
大佩梨9 小时前
VUE+Vite之环境文件配置及使用环境变量
前端
GDAL9 小时前
npm入门教程1:npm简介
前端·npm·node.js