扫码关注官方订阅号
正文
0
DDD
发布时间:2025-09-21 09:52:13
1029人浏览过
来源于php中文网
原创
在现代web开发中,表单是用户与网站交互的重要组成部分。为了提供良好的用户体验并确保数据有效性,客户端表单验证和反馈机制(如模态弹窗)至关重要。本文将指导您如何构建一个具备客户端验证功能,并在验证成功后显示自定义模态弹窗的html表单。
首先,我们需要构建表单的HTML结构、模态弹窗的HTML结构,并为其定义基本的CSS样式。
表单 (
Application Accepted × Go Back To Home Page Home
Go Back To Home Page Home
CSS用于美化表单和控制模态弹窗的视觉表现。关键在于.modal类,它将模态弹窗默认隐藏 (display: none;),并通过position: fixed和z-index确保其浮动在页面内容之上。
立即学习“Java免费学习笔记(深入)”;
body { font-family: Arial, Helvetica, sans-serif; } form { border: 3px solid #f1f1f1; padding-left: 290px; /* 示例布局调整 */ } input[type=text], input[type=date], select { width: 75%; padding: 5px 10px; margin: 8px 0; display: inline-block; border: 1px solid #ccc; box-sizing: border-box; height: 30px; /* 针对select */ text-align: center; /* 针对select */ } button { background-color: #FF5733; color: white; padding: 10px 15px; margin: 8px 0; border: none; cursor: pointer; width: 100px; border-radius: 15px; } button:hover { opacity: 0.8; } /* 模态弹窗样式 */ .modal { display: none; /* 默认隐藏 */ position: fixed; z-index: 1; padding-top: 100px; left: 0; top: 0; width: 100%; height: 100%; overflow: auto; background-color: rgb(0, 0, 0); background-color: rgba(0, 0, 0, 0.4); /* 半透明背景 */ } .modal-content { position: relative; background-color: #fefefe; margin: auto; padding: 0; border: 1px solid #888; width: 50%; box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); -webkit-animation-name: animatetop; -webkit-animation-duration: 0.4s; animation-name: animatetop; animation-duration: 0.4s; } /* 动画效果 */ @-webkit-keyframes animatetop { from { top: -300px; opacity: 0; } to { top: 0; opacity: 1; } } @keyframes animatetop { from { top: -300px; opacity: 0; } to { top: 0; opacity: 1; } } .close { color: white; float: right; font-size: 28px; font-weight: bold; } .close:hover, .close:focus { color: #000; text-decoration: none; cursor: pointer; } .modal-header { padding: 10px 15px; background-color: #5cb85c; color: white; } .modal-body { padding: 10px 15px; text-align: center; }
在页面加载时,我们可能需要初始化一些表单元素,例如根据选择动态填充下拉菜单。这通过window.onload事件处理程序实现。
var subObject = { "place1": ["place1", "place2", "place3"], "place2": ["place4", "place4"], }; window.onload = function() { var distSel = document.getElementById("district"); var citySel = document.getElementById("city"); // 填充区县下拉菜单 for (var x in subObject) { distSel.options[distSel.options.length] = new Option(x, x); } // 区县选择变化时,动态填充城市下拉菜单 distSel.onchange = function() { citySel.length = 1; // 重置城市下拉菜单,只保留默认选项 var z = subObject[distSel.value]; if (z) { // 确保有对应城市数据 for (var i = 0; i < z.length; i++) { citySel.options[citySel.options.length] = new Option(z[i], z[i]); } } }; // 模态弹窗的事件监听器应在此处初始化,而不是在valid()函数内部 var modal = document.getElementById("myModal"); var span = document.getElementsByClassName("close")[0]; // 点击关闭按钮时隐藏模态弹窗 span.onclick = function() { modal.style.display = "none"; }; // 点击模态弹窗外部区域时隐藏模态弹窗 window.onclick = function(event) { if (event.target == modal) { modal.style.display = "none"; } }; };
原始代码中一个常见的问题是将模态弹窗的关闭事件监听器(点击关闭按钮和点击外部区域)放置在valid()函数内部。这意味着每次调用valid()函数时,这些事件监听器都会被重新绑定,这不仅效率低下,还可能导致不可预测的行为。
正确的做法是: 将模态弹窗的事件监听器在页面加载时(即window.onload或脚本执行的全局作用域)绑定一次。这样可以确保事件处理的单一性和效率。
在上面的JavaScript代码中,我们已经将span.onclick和window.onclick移到了window.onload函数中,确保它们只在页面初始化时绑定一次。
valid()函数是实现客户端验证的核心。它会在用户点击提交按钮时被调用。该函数需要逐一检查所有表单字段的有效性。
Sora是OpenAI发布的一种文生视频AI大模型,可以根据文本指令创建现实和富有想象力的场景。
如果任何字段未通过验证,函数会使用alert()提示用户,并将焦点设置到相应的输入字段,然后返回false,阻止表单提交。
当所有验证都通过时,我们应该显示模态弹窗。
关键修正点:
// 注意:modal, span 等变量需要在全局或window.onload中定义,以便valid()函数访问 // 修正后的JavaScript代码如下: var subObject = { "place1": ["place1", "place2", "place3"], "place2": ["place4", "place4"], }; var modal; // 全局声明modal变量 var span; // 全局声明span变量 window.onload = function() { var distSel = document.getElementById("district"); var citySel = document.getElementById("city"); for (var x in subObject) { distSel.options[distSel.options.length] = new Option(x, x); } distSel.onchange = function() { citySel.length = 1; var z = subObject[distSel.value]; if (z) { for (var i = 0; i < z.length; i++) { citySel.options[citySel.options.length] = new Option(z[i], z[i]); } } }; // 在页面加载时初始化模态弹窗相关的DOM元素和事件监听器 modal = document.getElementById("myModal"); span = document.getElementsByClassName("close")[0]; span.onclick = function() { modal.style.display = "none"; }; window.onclick = function(event) { if (event.target == modal) { modal.style.display = "none"; } }; }; function valid() { // 访问表单元素时使用其name属性,如f1.username if (f1.username.value === "") { alert('请输入姓名'); f1.username.focus(); return false; } else if (f1.date.value === "") { alert('请输入出生日期'); f1.date.focus(); return false; } else if (f1.gender.value === "") { alert('请选择性别'); f1.gender.focus(); return false; } else if (f1.district.value === "") { alert('请选择区县'); f1.district.focus(); return false; } else if (f1.city.value === "") { alert('请选择城市'); f1.city.focus(); return false; } else { // 所有验证通过,显示模态弹窗 if (modal) { // 确保modal元素已加载 modal.style.display = "block"; } // 阻止表单的默认提交行为 return false; } }
将上述HTML、CSS和JavaScript代码整合到您的项目中,即可实现表单验证通过后显示弹窗的功能。
HTML (index.html):
表单验证与弹窗示例 Application Accepted × Go Back To Home Page Home
CSS (style.css): (同上文CSS代码)
JavaScript (script.js): (同上文修正后的JavaScript代码)
通过将模态弹窗的事件监听器放置在全局或window.onload中,并在表单验证成功后直接显示弹窗并阻止表单的默认提交行为,我们成功地解决了表单验证后弹窗不显示的问题。这种方法确保了代码的效率、稳定性和正确的逻辑流。遵循这些最佳实践,可以构建出功能完善、用户体验良好的Web表单。
相关文章
javascript如何实现动画_有哪些基本方法【教程】
javascript如何实现动画效果?_学习javascript动画编程基础【教程】
如何将单类选择器扩展为多类选择器(jQuery 多元素批量处理教程)
如何将单类选择器扩展为多类联合选择器(jQuery 教程)
什么是javascript及其核心概念全解析_如何从零开始学习javascript编程【教程】
HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!
相关标签:
本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
市场监管总局:2025 年召回问题充电宝 139.77 万台
2026-01-21 16:51
Pandas:跨数据集复用分位数分箱规则对新数据进行分组标注
2026-01-21 16:52
如何高效地将S3中的PNG/JPEG图像流式编码为Base64(无需本地落盘)
2026-01-21 16:54
马航 MH370 航班客机残骸重启搜寻,尚无重大发现
软银发布 AI 数据中心操作系统
台积电产能已证实:苹果今年不发iPhone 18
Firebase 字段名自动添加下划线前缀的解决方案
2026-01-21 16:55
如何在 Tomcat 中正确配置静态 PDF 文件以实现客户端下载
2026-01-21 16:58
如何安全地通过文本输入动态调用指定函数(PHP 教程)
2026-01-21 16:59
玩家认为《赛博朋克2077》不需要快速传送:没有意义!
热门AI工具
DeepSeek
幻方量化公司旗下的开源大模型平台
AI大模型
开放平台
豆包大模型
字节跳动自主研发的一系列大型语言模型
通义千问
阿里巴巴推出的全能AI助手
腾讯元宝
腾讯混元平台推出的AI助手
文档处理
Excel 表格
文心一言
文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。
中文写作
讯飞写作
基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿
写作工具
即梦AI
一站式AI创作平台,免费AI图片和视频生成。
图片拼接
图画生成
ChatGPT
最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。
智谱清言 - 免费全能的AI助手
PC软件
相关专题
在js中,可以利用array对象的length属性来获取数组长度,该属性可设置或返回数组中元素的数目,只需要使用“array.length”语句即可返回表示数组对象的元素个数的数值,也就是长度值。php中文网还提供JavaScript数组的相关下载、相关课程等内容,供大家免费下载使用。
557
2023.06.20
js刷新当前页面的方法:1、reload方法,该方法强迫浏览器刷新当前页面,语法为“location.reload([bForceGet]) ”;2、replace方法,该方法通过指定URL替换当前缓存在历史里(客户端)的项目,因此当使用replace方法之后,不能通过“前进”和“后退”来访问已经被替换的URL,语法为“location.replace(URL) ”。php中文网为大家带来了js刷新当前页面的相关知识、以及相关文章等内容
395
2023.07.04
js四舍五入的方法:1、tofixed方法,可把 Number 四舍五入为指定小数位数的数字;2、round() 方法,可把一个数字舍入为最接近的整数。php中文网为大家带来了js四舍五入的相关知识、以及相关文章等内容
756
js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。
478
2023.09.01
JavaScript中的转义字符是反斜杠和引号,可以在字符串中表示特殊字符或改变字符的含义。本专题为大家提供转义字符相关的文章、下载、课程内容,供大家免费下载体验。
494
2023.09.04
js生成随机数的方法有:1、使用random函数生成0-1之间的随机数;2、使用random函数和特定范围来生成随机整数;3、使用random函数和round函数生成0-99之间的随机整数;4、使用random函数和其他函数生成更复杂的随机数;5、使用random函数和其他函数生成范围内的随机小数;6、使用random函数和其他函数生成范围内的随机整数或小数。
1051
JavaScript启用方法有内联脚本、内部脚本、外部脚本和异步加载。详细介绍:1、内联脚本是将JavaScript代码直接嵌入到HTML标签中;2、内部脚本是将JavaScript代码放置在HTML文件的`<script>`标签中;3、外部脚本是将JavaScript代码放置在一个独立的文件;4、外部脚本是将JavaScript代码放置在一个独立的文件。
659
2023.09.12
javascript中的Symbol数据类型是一种基本数据类型,用于表示独一无二的值。Symbol的特点:1、独一无二,每个Symbol值都是唯一的,不会与其他任何值相等;2、不可变性,Symbol值一旦创建,就不能修改或者重新赋值;3、隐藏性,Symbol值不会被隐式转换为其他类型;4、无法枚举,Symbol值作为对象的属性名时,默认是不可枚举的。
554
2023.09.20
本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。
6
2026.01.23
热门下载
相关下载
精品课程
共14课时 | 0.8万人学习
共46课时 | 3万人学习
共754课时 | 22.7万人学习
共6课时 | 10万人学习
共79课时 | 151.5万人学习
共6课时 | 53.4万人学习
共4课时 | 14.5万人学习
共13课时 | 0.9万人学习
最新文章
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部