用 HTML、CSS 和 jQuery 打造多页输入框验证功能
在网页开发中,输入框验证是至关重要的一环,它能确保用户输入的数据符合特定要求,提升交互的准确性与流畅性。今天,我们就来深入剖析一个运用 HTML、CSS 和 jQuery 实现多页输入框验证的精彩实例,带你领略前端开发中表单验证的魅力。
一、整体架构概览
表单容器 form-container
,它有着白色的背景、柔和的阴影以及圆润的边角,为用户营造出舒适的输入环境。在这个容器内,通过 CSS 的 display: none
和 display: block
巧妙切换,实现了多页表单的无缝衔接,初始状态下仅有第一页 page1
显示,其他页面皆隐藏,等待用户操作触发页面切换。
二、HTML 布局
- 输入框组
form-group
:每个form-group
都是一个独立的输入模块,包含清晰明了的label
标签,如 “用户名”“电话” 等,紧接着是对应的input
输入框,为了确保用户体验,部分输入框还贴心地设置了autocomplete="off"
,避免浏览器自动填充可能带来的混淆。并且,每个输入框下方都预留了用于展示错误信息的error-message
区域,初始为空,一旦验证不通过,将精准地向用户反馈问题所在。 - 按钮布局:第一页底部的
nextButton
是通往后续页面的 “钥匙”,醒目地提示用户进行下一步操作;第二页则配备了prevButton
方便用户返回上一页查看或修改信息,以及submitButton2
作为提交整个表单的最终指令,这些按钮均采用统一的样式风格,蓝色背景搭配白色文字,鼠标悬停时还有优雅的颜色渐变效果,增强交互反馈。
<div class="form-container"><div class="page active" id="page1"><h2>第一页输入框验证</h2><div class="form-group"><label for="username">用户名:</label><input type="text" id="username" autocomplete="off"><div class="error-message" id="usernameError"></div></div><div class="form-group"><label for="tel">电话:</label><input type="text" id="tel"><div class="error-message" id="telError"></div></div><div class="form-group"><label for="password">密码:</label><input type="password" id="password"><div class="error-message" id="passwordError"></div></div><div class="form-group"><label for="address">地址:</label><input type="text" id="address"><div class="error-message" id="addressError"></div></div><div class="form-group"><label for="industry">行业:</label><input type="text" id="industry"><div class="error-message" id="industryError"></div></div><div class="form-group"><label for="scol">学校:</label><input type="text" id="scol"><div class="error-message" id="scolError"></div></div><button id="nextButton">下一页</button></div><div class="page" id="page2"><h2>第二页输入框验证</h2><div class="form-group"><label for="email">邮箱:</label><input type="text" id="email"><div class="error-message" id="emailError"></div></div><div class="form-group"><label for="age">年龄:</label><input type="text" id="age"><div class="error-message" id="ageError"></div></div><div class="form-group"><label for="city">城市:</label><input type="text" id="city"><div class="error-message" id="cityError"></div></div><button id="prevButton">上一页</button><button id="submitButton2">提交</button></div></div>
三、CSS 样式
.form-container {background-color: #fff;padding: 20px;border-radius: 8px;box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);}.form-group {margin-bottom: 15px;height: 60px;}.form-group label {display: block;margin-bottom: 5px;}.form-group input {width: 100%;padding: 8px;box-sizing: border-box;border: 1px solid #ccc;border-radius: 4px;}.form-group input.error {border-color: #ff0000;}.error-message {color: #ff0000;font-size: 12px;}button {width: 100%;padding: 10px;background-color: #007bff;color: #fff;border: none;border-radius: 4px;cursor: pointer;margin-top: 10px;}button:hover {background-color: #0056b3;}.page {display: none;}.page.active {display: block;}
- 整体风格:
form-container
的样式设定奠定了整个表单的基调,白色背景、适当的内边距和柔和阴影让表单从页面中脱颖而出,又不失和谐融入感。圆角边框的运用则在细微处增添了一丝现代与柔和,打破常规矩形的生硬感。 - 输入框样式:
form-group
内的input
输入框宽度自适应容器,确保无论在何种屏幕尺寸下都能完美适配,同时设置了浅灰色边框,既区分了输入区域又不过分突兀。而当输入框验证出现错误时,error
类的动态添加会瞬间将边框颜色切换为醒目的红色,如同警示灯一般,第一时间抓住用户的注意力。 - 错误信息样式:
error-message
以小巧的红色字体呈现,低调而精准地出现在输入框下方,不抢占过多视觉空间,又能清晰传达错误详情,如 “用户名长度不能少于 3 个字符”,让用户一目了然知道问题所在,以便迅速修正。
四、JavaScript 核心验证逻辑(重点来了!)
- 页面切换与验证联动:
- 利用 jQuery 的强大选择器功能,首先获取所有页面元素
$('.page')
和初始页面索引currentPageIndex = 0
,为后续操作埋下伏笔。 setupValidation
函数堪称整个验证体系的灵魂建筑师,它接收页面id
,深入到对应页面内部,针对每一个输入框精准定制验证规则。通过遍历$form.find('input[type="text"], input[type="password"]')
,依据输入框id
的不同,在switch
语句中为其量身打造验证函数validationRule
和相应的错误提示errorMessage
。例如,对于username
输入框,要求$.trim(value).length >= 3
,确保用户名至少有 3 个字符,去除首尾空格后再进行长度判断,严谨而实用。- 同时,为每个输入框的
change
事件绑定validateInput
函数,该函数如同一位严谨的质检员,实时监控输入框内容变化。一旦输入值不符合预设规则,立即清空原有错误信息,移除可能残留的错误样式,然后根据validationRule
的判断结果,精准地设置错误提示文本,并为输入框添加上醒目的error
样式类,让错误无处遁形。
- 利用 jQuery 的强大选择器功能,首先获取所有页面元素
- 按钮交互与验证把关:
- “下一页” 按钮
#nextButton
的点击事件处理函数中,遍历第一页所有输入框进行验证,只有当所有输入框均通过验证(isValid = true
)时,才会移除第一页的active
类隐藏当前页,并为第二页添加active
类,流畅地切换到下一页,避免用户带着错误信息进入后续流程,保证数据的准确性。 - “上一页” 按钮
#prevButton
则简单直接,点击瞬间移除第二页active
类,激活第一页,方便用户回溯修改,这种双向的页面切换机制极大地提升了用户操作的灵活性。 - 第二页的 “提交” 按钮
#submitButton2
同样在点击时遍历本页所有输入框进行严格验证,只有全部通过验证后,才会弹出令人欣喜的 “所有输入验证成功!” 提示框,标志着用户完整且正确地填写了表单信息,完成一次流畅的交互体验。
- “下一页” 按钮
$(function() {// 选取所有的页面元素(class 为 page 的元素)const pages = $('.page');// 当前页面的索引,初始值为 0(表示第一页)const currentPageIndex = 0;// 定义一个函数用于设置指定页面的验证规则和相关事件function setupValidation(pageId) {// 根据传入的页面 id 选取对应的页面元素const $form = $(`#${pageId}`);// 在该页面中选取所有的文本输入框和密码输入框const $inputs = $form.find('input[type="text"], input[type="password"]');// 使用 $.map 方法遍历所有输入框,为每个输入框创建一个验证相关的对象const inputs = $inputs.map(function() {const $input = $(this);const id = $input.attr('id');// 选取对应的错误信息显示元素const $error = $(`#${id}Error`);// 获取输入框对应的标签文本,并去除文本中的冒号const label = $form.find(`label[for="${id}"]`).text().replace(':', '');let validationRule;let errorMessage;// 根据输入框的 id 来设置不同的验证规则和错误信息switch (id) {case 'username':validationRule = (value) => $.trim(value).length >= 3;errorMessage = `${label}长度不能少于3个字符`;break;case 'tel':validationRule = (value) => /^\d{11}$/.test($.trim(value));errorMessage = `${label}必须为11位数字`;break;case 'password':validationRule = (value) => $.trim(value).length >= 6;errorMessage = `${label}长度不能少于6个字符`;break;case 'address':validationRule = (value) => $.trim(value) !== '';errorMessage = `${label}不能为空`;break;case 'scol':validationRule = (value) => $.trim(value) !== '';errorMessage = `${label}名称不能为空`;break;case 'email':validationRule = (value) => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test($.trim(value));errorMessage = `${label}格式不正确`;break;case 'age':validationRule = (value) => /^\d+$/.test($.trim(value)) && parseInt($.trim(value)) > 0;errorMessage = `${label}必须为正整数`;break;case 'city':validationRule = (value) => $.trim(value) !== '';errorMessage = `${label}不能为空`;break;default:validationRule = (value) => $.trim(value) !== '';errorMessage = `${label}不能为空`;}return {input: $input,error: $error,validationRule,errorMessage};}).get();// 定义一个函数用于验证单个输入框的值function validateInput(inputData) {const {input,error,validationRule,errorMessage} = inputData;// 清空之前的错误信息error.text('');// 移除输入框的错误样式类input.removeClass('error');const value = input.val();// 如果输入值不满足验证规则if (!validationRule(value)) {// 设置错误信息error.text(errorMessage);// 给输入框添加错误样式类input.addClass('error');return false;}return true;}// 为输入框的 change 事件绑定处理函数$inputs.on('change', function() {const inputData = inputs.find(item => item.input.is(this));if (inputData) {validateInput(inputData);}});// 返回包含输入框数组和验证函数的对象return {inputs,validateInput};}// 为第一页设置验证规则和相关事件const page1Validation = setupValidation('page1');// 为第二页设置验证规则和相关事件const page2Validation = setupValidation('page2');// 为“下一页”按钮绑定点击事件$('#nextButton').on('click', function() {let isValid = true;// 遍历第一页的所有输入框并进行验证page1Validation.inputs.forEach(inputData => {if (!page1Validation.validateInput(inputData)) {isValid = false;}});// 如果第一页所有输入框验证通过if (isValid) {// 移除第一页的 active 类(隐藏第一页)$('#page1').removeClass('active');// 为第二页添加 active 类(显示第二页)$('#page2').addClass('active');}});// 为“上一页”按钮绑定点击事件$('#prevButton').on('click', function() {// 移除第二页的 active 类(隐藏第二页)$('#page2').removeClass('active');// 为第一页添加 active 类(显示第一页)$('#page1').addClass('active');});// 为第二页的“提交”按钮绑定点击事件$('#submitButton2').on('click', function() {let isValid = true;// 遍历第二页的所有输入框并进行验证page2Validation.inputs.forEach(inputData => {if (!page2Validation.validateInput(inputData)) {isValid = false;}});// 如果第二页所有输入框验证通过if (isValid) {// 弹出提示框表示所有输入验证成功alert('所有输入验证成功!');}});});
通过 HTML、CSS 和 jQuery 的紧密协作,这个多页输入框验证实例不仅在功能上满足了对用户输入数据的严格把控,在视觉与交互体验上也做到了精益求精,为我们打造高质量网页表单提供了优秀的范例。无论是新手入门学习前端表单验证,还是老手寻求优化表单交互的灵感,相信都能从中汲取到满满的干货,赶紧动手试试吧!
相关文章:
用 HTML、CSS 和 jQuery 打造多页输入框验证功能
在网页开发中,输入框验证是至关重要的一环,它能确保用户输入的数据符合特定要求,提升交互的准确性与流畅性。今天,我们就来深入剖析一个运用 HTML、CSS 和 jQuery 实现多页输入框验证的精彩实例,带你领略前端开发中表单…...
在CentOS上安装Docker需要注意的事项
文章目录 前言Docker Engine如何设置仓库设置镜像加速器获取镜像加速器地址 写在前面:大家好!我是晴空๓。如果博客中有不足或者的错误的地方欢迎在评论区或者私信我指正,感谢大家的不吝赐教。我的唯一博客更新地址是:https://ac-…...
Chrome 135 版本新特性
Chrome 135 版本新特性 一、Chrome 135 版本浏览器更新 ** 1. 第三方托管账户注册迁移到 OIDC 授权码流程** Chrome 135 将账户注册的登录页面从营销网站迁移到动态网站,同时也将 OpenID Connect (OIDC) 的隐式流程迁移到授权码流程。这样做的目的是进一步提升第…...
CMake实战指南一:add_custom_command
CMake 进阶:add_custom_command 用法详解与实战指南 在 CMake 构建系统中,add_custom_command 是一个灵活且强大的工具,允许开发者在构建流程中插入自定义操作。无论是生成中间文件、执行预处理脚本,还是在目标构建前后触发额外逻…...
K8S学习之基础七十五:istio实现灰度发布
istio实现灰度发布 上传镜像到harbor 创建两个版本的pod vi deployment-v1.yaml apiVersion: apps/v1 kind: Deployment metadata:name: appv1labels:app: v1 spec:replicas: 1selector:matchLabels:app: v1apply: canarytemplate:metadata:labels:app: v1apply: canaryspec…...
7-1 列出连通集
作者 陈越 单位 浙江大学 给定一个有 n 个顶点和 m 条边的无向图,请用深度优先遍历(DFS)和广度优先遍历(BFS)分别列出其所有的连通集。假设顶点从 0 到 n−1 编号。进行搜索时,假设我们总是从编号最小的顶点…...
XML Schema 指示器
XML Schema 指示器 引言 XML Schema 是一种用于定义 XML 文档结构的语言,它能够确保 XML 文档的合法性。在 XML 文档的解析和应用中,XML Schema 指示器(XML Schema Indicator)扮演着至关重要的角色。本文将详细介绍 XML Schema 指示器的概念、作用、应用场景以及如何使用…...
Linux内核中TCP协议栈的实现:tcp_close函数的深度剖析
引言 TCP(传输控制协议)作为互联网协议族中的核心协议之一,负责在不可靠的网络层之上提供可靠的、面向连接的字节流服务。Linux内核中的TCP协议栈实现了TCP协议的全部功能,包括连接建立、数据传输、流量控制、拥塞控制以及连接关闭等。本文将深入分析Linux内核中tcp_close…...
17-产品经理-创建发布
点击“发布”-“创建发布”。 填写发布名称,选择测试的版本。还可以设置此次发布是否为“里程碑”。 点击“保存”后,进入该发布详情页面。需要为此次发布关联需求、已解决BUG、以及遗留BUG。可以通过设置条件,进行“搜索”,然后批…...
了解Spring的统一功能
目录 一、统一数据返回格式 1.引入统一数据返回格式 2.学习使用统一数据返回格式 support方法 beforeBodyWrite方法 统一数据返回格式具体逻辑 使用统一数据返回格式存在的问题 解决方法: 统一数据返回格式的优点 统一数据返回格式代码实现(包含了…...
123213
根据道路在道路网的地位、交通功能、对沿线的服务功能划分可分为快速路、主干路、次干路及支路 快速路完全为交通功能服务, 主干路以交通功能为主, 次干路是城市区域性的交通干道,为区域交通集散服务,兼有服务功能,结合主干路组成干路网 …...
通过 axios 请求回来的 HTML 字符串渲染到 Vue 界面上并添加样式
1. 通过 axios 获取数据 使用 axios 发起请求,获取返回的 HTML 字符串数据。 2. 在 Vue 中处理和渲染数据 由于 HTML 字符串中可能包含一些标签和样式,直接插入到 Vue 的模板中可能会导致样式问题。可以通过以下方式处理: 方法一…...
P1162 填涂颜色(BFS)
题目描述 由数字 0 组成的方阵中,有一任意形状的由数字 1 构成的闭合圈。现要求把闭合圈内的所有空间都填写成 2。例如:66 的方阵(n6),涂色前和涂色后的方阵如下: 如果从某个 0 出发,只向上下…...
【笔记】VS中C#类库项目引用另一个类库项目的方法
VS中C#类库项目引用另一个类库项目的方法 在 C# 开发中,有时我们需要在一个类库项目中引用另一个类库项目,但另一个项目可能尚未编译成 DLL。在这种情况下,我们仍然可以通过 Visual Studio 提供的项目引用功能进行依赖管理。 🎯 …...
进程内存分布--之smaps呈现memory-layout.cpp内存分布
上一篇介绍了:进程内存分布--之单线程代码来内存分布呈现memory-layout.cpp 这里我们使用smaps将更加形象的的体现内存分布,smaps文件是Linux的proc文件系统提供的一种可以查看内存资源使用情况的方法,Linux系统中运行的库、堆、栈等信息都可在smaps中查…...
再看自适应RAG方法:SEAKR|PIKE-RAG|DeepRAG
当大语言模型开始"怀疑人生":一场关于知识检索的AI内心戏 各位看官,今天我们要聊一个AI界的"哲学难题"——当大语言模型突然意识到自己可能是个"半瓶子醋",会发生什么奇妙反应? 想象一下这个场景:某天深夜,ChatGPT正对着用户提问"如…...
DNS服务(Linux)
DNS 介绍 dns,Domain Name Server,它的作用是将域名解析为 IP 地址,或者将IP地址解析为域名。 这需要运行在三层和四层,也就是说它需要使用 TCP 或 UDP 协议,并且需要绑定端口,53。在使用时先通过 UDP 去…...
探秘PythonJSON解析深度剖析json.loads处理嵌套JSON字符串的奥秘
哈喽,大家好,我是木头左! 在当今数字化时代,数据以各种格式呈现,而JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,在众多领域广泛应用。Python作为一门强大的编程语言,其内置的json模块为处理JSON数据提供了便捷的方法。然而,当遇到像{"name&q…...
Day7 FIFO与鼠标控制
文章目录 1. harib04a例程(获取按键编码)2. harib04b例程(加快中断处理)3. harib04c例程(FIFO缓冲区)4. harib04d例程(改善FIFO缓冲区)5. harib04e例程(整理FIFO缓冲区&a…...
软件工程第一章习题
第1章软件与软件工程 1.选择题 (1)下列说法中正确的是( )o A.20世纪50年代提出了软件工程的概念 B.20世纪60年代提出了软件工程的概念 C.20世纪70年代出现了客户机/服务器技术 D.20世纪80年代软件工程学科达到成熟 (2)软件危机的主要原因是( Do B.软件生产…...
Ollama 手动高速下载Win/Linux/Mac安装包及安装方法
前言 Ollama下载速度太慢,按这个方式,速度嘎嘎的快----下载地址 手动安装 如果要从以前的版本升级,则应删除旧库。比如:sudo rm -rf /usr/lib/ollama 解压 tar -C /usr -xzf ollama-linux-amd64.tgz # 解压到/usr文件夹# 如…...
Jmeter+Jenkins+Ant自动化持续集成环境搭建
一、安装准备 1.JDK:jdk-8u121-windows-x64 2.jmeter工具:apache-jmeter-2.13 3.ANT工具:apache-ant-1.9.7-bin 4.jenkins工具:jenkins-2.32.2 二、软件安装 1.JDK的安装 >双击JDK安装包,选择安装路径(本人是…...
【11】Redis快速安装与Golang实战指南
文章目录 1 Redis 基础与安装部署1.1 Redis 核心特性解析1.2 Docker Compose 快速部署1.3 Redis 本地快速部署 2 Golang 与 Redis 集成实战2.1 环境准备与依赖安装2.2 核心操作与数据结构实践2.2.1 基础键值操作2.2.2 哈希结构存储用户信息 3 生产级应用场景实战3.1 分布式锁实…...
ISP算法.红外图像增强
在图像处理领域,常见的图像处理一般都是白光相机,实际红外相机也是常见的一种相机,它可以用来对发热的东西进行成像,也可以作为白光相机夜晚不可见的一种辅助手段,为白光相机赋能夜视能力。 红外相机的成像原理在于辐射…...
Spring Boot中使用RedisTemplate操作Redis的几种数据类型详解
Redis作为高性能的键值存储系统,在现代Java应用中扮演着重要角色。Spring Boot通过RedisTemplate为开发者提供了便捷的Redis操作方式。本文将详细介绍如何使用RedisTemplate操作Redis的五种主要数据类型。 一、RedisTemplate简介 RedisTemplate是Spring Data Redi…...
大数据与人工智能之大数据架构(Hadoop、Spark、Flink)
一、核心特性与架构设计 1. Hadoop:分布式批处理的基石 核心组件: HDFS:分布式文件系统,支持大规模数据存储。MapReduce:基于“分而治之”的批处理模型,适合离线分析。 架构特点: 批处理主导&…...
VSCode中Marp插件
VSCode神级插件Marp,用Markdown来做PPT 优秀教程:https://zhuanlan.zhihu.com/p/582872955...
C++20 数学常数:<numbers> 头文件的革新
文章目录 一、<numbers> 头文件中的数学常数二、使用示例三、优势与应用场景(一)提高代码可读性(二)提高精度(三)适用于多种数据类型(四)简化数学计算 四、总结 C20 标准引入了…...
OpenCV--图像平滑处理
在数字图像处理领域,图像平滑处理是一项极为重要的技术,广泛应用于计算机视觉、医学影像分析、安防监控等多个领域。在 OpenCV 这一强大的计算机视觉库的助力下,我们能便捷地实现多种图像平滑算法。本文将深入探讨图像平滑的原理,…...
【KMP】P7114 [NOIP2020] 字符串匹配|省选-
本文涉及知识点 较难理解的字符串查找算法KMP P7114 [NOIP2020] 字符串匹配 题目描述 小 C 学习完了字符串匹配的相关内容,现在他正在做一道习题。 对于一个字符串 S S S,题目要求他找到 S S S 的所有具有下列形式的拆分方案数: S A …...
C++20 统一容器擦除:std::erase 和 std::erase_if
文章目录 一、std::erase 的用法1.1 语法1.2 参数1.3 返回值1.4 示例 二、std::erase_if 的用法2.1 语法2.2 参数2.3 返回值2.4 示例 三、优势与应用场景3.1 统一的接口3.2 简化代码3.3 适用范围广 四、总结 C20 引入了两个非常实用的函数模板: std::erase 和 std…...
阿里云oss视频苹果端无法播放问题记录
记录一下苹果端视频不可以播放的原因. 看了一下其他视频可以正常播放,但是今天客户发来的视频无法正常播放.咨询过阿里云售后给出的原因是编码格式过高. 需要调整编码格式为:baseline, 下面记录如何使用ffmpeg修改视频的编码格式. 下载文件(可从官方下载) 配置环境变量(系统变…...
10-MySQL-性能优化思路
1、优化思路 当我们发现了一个慢SQL的问题的时候,需要做性能优化,一般我们是为了提高SQL查询更快,一个查询的流程由下图的各环节组成,每个环节都会消耗时间,要减少消耗时候需要从各个环节都分析一遍。 2 连接配置优化…...
Postman之参数化详解
🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 小伙伴们,好久不见呀,今天呢笔者想和大家聊聊postman参数化,在接口测试中,部分参数每次发送请求是唯一的数值&a…...
【c++深入系列】:类和对象详解(下)
🔥 本文专栏:c 🌸作者主页:努力努力再努力wz 💪 今日博客励志语录: 你的人生剧本,不是父母的续集,不是子女的前传,更不是朋友的外传——你是自己故事的主角 ★★★ 本文前…...
浅谈「分词」:原理 + 方案对比 + 最佳实践
在文本搜索、自然语言处理、智能推荐等场景中,「分词」 是一个基础但至关重要的技术点。无论是用数据库做模糊查询,还是构建搜索引擎,分词都是提高效率和准确度的核心手段。 🔍 一、什么是分词? 分词(Tok…...
第十八:GC 垃圾回收
2.1 三色标记# 灰色:对象已被标记,但这个对象包含的子对象未标记黑色:对象已被标记,且这个对象包含的子对象也已标记,gcmarkBits对应的位为1(该对象不会在本次GC中被清理)白色:对象…...
【微机及接口技术】- 第七章 可编程定时/计数器
文章目录 第一节 定时/计数器的概述一、定时与计数二、定时方法 第二节 可编程定时/计数器8254一、8254-2的基本功能二、8254的内部结构和外部引脚三、8254 的工作方式1. 方式0:计数到零产生中断方式2. 方式1:硬件可重触发单稳方式3. 方式2:速…...
MES生产工单管理系统,Java+Vue,含源码与文档,实现生产工单全流程管理,提升制造执行效率与精准度
前言: MES生产工单管理系统是制造业数字化转型的核心工具,通过集成生产、数据、库存等模块,实现全流程数字化管理。以下是对各核心功能的详细解析: 一、生产管理 工单全生命周期管理 创建与派发:根据销售订单或生产计…...
【区块链安全 | 第三十五篇】溢出漏洞
文章目录 溢出上溢示例溢出漏洞溢出示例漏洞代码代码审计1. deposit 函数2. increaseLockTime 函数 攻击代码攻击过程总结修复建议审计思路 溢出 算术溢出(Arithmetic Overflow),简称溢出(Overflow),通常分…...
【自记录】ubuntu命令行下禁用指定声卡
设备上内置了一块声卡,出于某些原因我希望禁用他。 通过arecord -l可以查看到该设备 $ arecord -l **** List of CAPTURE Hardware Devices **** card 0: Device [USB PnP Sound Device], device 0: USB Audio [USB Audio]Subdevices: 1/1Subdevice #0: subdevice…...
设计模式 Day 4:观察者模式(Observer Pattern)深度解析
在经历了前三天的对象创建型设计模式学习之后,今天我们开始进入行为型设计模式的探索之旅。行为型模式聚焦于对象之间的通信机制与协作方式,其中最经典且应用最广泛的就是——观察者模式(Observer Pattern)。本文将用8000字篇幅&a…...
`QTabWidget` 的标签页头设置样式,可以通过在 QSS 文件中定义 `QTabBar::tab` 的样式
要为 QTabWidget 的标签页头设置样式,可以通过在 QSS 文件中定义 QTabBar::tab 的样式来实现。以下是完整的代码示例和 QSS 文件内容,展示如何为标签页头设置背景颜色、文本颜色、悬停效果和选中效果。 ### **代码示例** cpp #include <QApplication…...
低代码开发革命:用 ZKmall开源商城可视化逻辑编排实现业务流程再造
ZKmall开源商城通过可视化逻辑编排引擎与低代码开发范式,重新定义了企业级电商业务流程的构建与优化方式。本文将从技术架构、核心能力、实践案例及行业价值等维度,解析其如何以"低代码流程引擎"组合拳实现业务流程再造的革命性突破。 一、低代…...
CAN外设
目录 1. CAN外设结构 1.1 CAN外设发送流程 1.2 CAN外设接收流程 1.3 发送接受配置位 2. CAN外设过滤器 2.1 过滤器配置 2.2 测试模式 2.3 工作模式 2.4 过滤器对应中断 2.5 错误处理和离线恢复 1. CAN外设结构 以STM32F103为例。以下是它的内部结构框图。 其具体发…...
(七)安卓开发中的状态列表图形(StateListDrawable)详解
在安卓开发中,**状态列表图形(StateListDrawable)**是一种非常实用的资源,它允许开发者根据视图的不同状态(如按下、聚焦、选中等)来动态显示不同的图像或颜色。这种机制在创建交互式用户界面时尤为重要&am…...
2023年蓝桥杯第十四届CC++大学B组真题及代码
目录 1A:日期统计 解析代码_暴力_正解 2B:01串的熵 解析代码_暴力_正解 3C:冶炼金属 解析代码_暴力_正解 4D:飞机降落 解析代码_暴力dfs_正解 5E:接龙数列 解析代码_dp_正解 6F:岛屿个数 解析代…...
odo18实施——销售-仓库-采购-制造-制造外包-整个流程自动化单据功能的演示教程
安装模块 安装销售 、库存、采购、制造模块 2.开启外包功能 在进入制造应用点击 配置—>设置 勾选外包,点击保存 添加信息 一、添加客户信息 点击到销售应用 点击订单—>客户 点击新建 创建客户1,及其他客户相关信息,点…...
c++造轮子之REACTOR实战
本文实现的为单reactor 多线程(base) 非核心库 InetAddress 这个库简单而言 无疑是设置ip地址和端口 class InetAddress { public:struct sockaddr_in addr;socklen_t addr_len;InetAddress();InetAddress(const char* ip, uint16_t port);~InetAddress(); };具体而言: Ine…...
【Easylive】Elasticsearch搜索组件详解
【Easylive】项目常见问题解答(自用&持续更新中…) 汇总版 一、Elasticsearch基础介绍 Elasticsearch(简称ES)是一个分布式、RESTful风格的搜索和分析引擎,基于Apache Lucene构建。在视频平台中,它主要用于: 全…...