Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
实现表单验证后显示带有链接的弹出提示框教程_创想鸟

实现表单验证后显示带有链接的弹出提示框教程

实现表单验证后显示带有链接的弹出提示框教程

本教程详细介绍了如何在Web表单提交后,通过JavaScript实现严格的客户端验证,并在验证成功后显示一个带有成功消息和导航链接的弹出框。文章涵盖了HTML结构、CSS样式以及JavaScript逻辑的完整实现,旨在帮助开发者构建用户体验更佳的交互式表单。

1. 引言

在现代web应用中,表单是用户与系统交互的重要组成部分。为了提升用户体验并确保数据有效性,客户端表单验证和提交后的反馈机制至关重要。本教程将指导您如何创建一个包含多个字段的表单,并在用户点击提交按钮后,先进行客户端验证。如果所有字段都符合要求,则弹出一个模态框(popup box),显示“申请已接受”的消息,并提供一个返回首页的链接。

2. 核心概念

实现这一功能主要涉及以下技术点:

HTML表单结构: 定义输入字段和提交按钮。HTML模态框结构: 定义一个默认隐藏的弹出框,包含成功消息和链接。CSS样式: 控制模态框的显示、隐藏、布局和外观。JavaScript验证逻辑: 检查表单字段的输入是否有效。JavaScript DOM操作: 在验证成功后显示模态框,并处理模态框的关闭事件。

3. HTML 结构

首先,我们需要为表单和模态框定义清晰的HTML结构。

3.1 表单结构

创建一个简单的申请表单,包含姓名、出生日期和性别字段。为表单和输入字段设置 name 和 id 属性,以便JavaScript可以轻松访问它们。

  

申请表单

注意事项:

form 标签的 name 属性(f1)在旧版JavaScript中可以直接作为全局变量访问,但更推荐使用 document.forms[“f1”] 或 document.getElementById(“applicationForm”) 来获取表单引用。button 标签的 type=”submit” 属性会触发表单提交。我们将通过JavaScript来拦截这个默认行为。

3.2 模态框结构

创建一个模态框,包含一个标题、关闭按钮、成功消息和返回首页的链接。这个模态框默认应该是隐藏的。

注意事项:

div 标签的 id=”myModal” 将用于JavaScript获取模态框元素。span 标签的 class=”close” 将作为关闭按钮。a 标签的 href 属性应指向您的首页路径。

4. CSS 样式

为了让模态框正常显示并具有良好的视觉效果,我们需要添加一些基本的CSS样式。这些样式将确保模态框默认隐藏,并在需要时覆盖整个屏幕。

/* 模态框容器 */.modal {  display: none; /* 默认隐藏 */  position: fixed; /* 固定定位,覆盖整个屏幕 */  z-index: 1; /* 位于其他内容之上 */  left: 0;  top: 0;  width: 100%;  height: 100%;  overflow: auto; /* 如果内容过多,允许滚动 */  background-color: rgba(0,0,0,0.4); /* 半透明黑色背景 */}/* 模态框内容 */.modal-content {  background-color: #fefefe;  margin: 15% auto; /* 垂直居中,水平居中 */  padding: 20px;  border: 1px solid #888;  width: 80%; /* 宽度 */  max-width: 500px; /* 最大宽度 */  box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2), 0 6px 20px 0 rgba(0,0,0,0.19);  animation-name: animatetop;  animation-duration: 0.4s;}/* 关闭按钮 */.close {  color: #aaa;  float: right;  font-size: 28px;  font-weight: bold;}.close:hover,.close:focus {  color: black;  text-decoration: none;  cursor: pointer;}/* 动画效果(可选) */@keyframes animatetop {  from {top: -300px; opacity: 0}  to {top: 0; opacity: 1}}

5. JavaScript 逻辑

JavaScript是实现表单验证和模态框交互的核心。我们将编写一个函数来处理表单提交,执行验证,并在成功时显示模态框。

// 获取DOM元素引用const applicationForm = document.getElementById("applicationForm");const submitBtn = document.getElementById("submitBtn");const myModal = document.getElementById("myModal");const closeBtn = document.getElementsByClassName("close")[0];// 1. 模态框关闭逻辑(页面加载时绑定)// 点击关闭按钮时隐藏模态框if (closeBtn) {    closeBtn.onclick = function() {        myModal.style.display = "none";    };}// 点击模态框外部区域时隐藏模态框window.onclick = function(event) {    if (event.target === myModal) {        myModal.style.display = "none";    }};// 2. 表单提交和验证逻辑// 阻止表单默认提交行为,并执行自定义验证applicationForm.addEventListener('submit', function(event) {    event.preventDefault(); // 阻止表单默认提交(页面刷新)    // 获取表单字段值    const username = applicationForm.username.value.trim();    const dateOfBirth = applicationForm.date.value;    const genderRadios = applicationForm.gender;    let selectedGender = '';    for (let i = 0; i < genderRadios.length; i++) {        if (genderRadios[i].checked) {            selectedGender = genderRadios[i].value;            break;        }    }    // 执行验证    if (username === "") {        alert('请输入姓名');        applicationForm.username.focus();        return; // 停止执行,不显示模态框    }    if (dateOfBirth === "") {        alert('请输入您的出生日期');        applicationForm.date.focus();        return;    }    if (selectedGender === "") {        alert('请选择性别');        // 可以将焦点设置到第一个性别选项,或保持不变        // applicationForm.gender[0].focus();        return;    }    // 如果所有验证都通过,则显示模态框    myModal.style.display = "block";});// 替代方案:如果按钮是 onclick="return valid()",可以这样实现 valid 函数/*function valid() {    // 获取表单引用    const f1 = document.forms["f1"]; // 或者 document.getElementById("applicationForm");    // 获取表单字段值    const username = f1.username.value.trim();    const dateOfBirth = f1.date.value;    const genderRadios = f1.gender;    let selectedGender = '';    for (let i = 0; i < genderRadios.length; i++) {        if (genderRadios[i].checked) {            selectedGender = genderRadios[i].value;            break;        }    }    // 执行验证    if (username === "") {        alert('请输入姓名');        f1.username.focus();        return false; // 验证失败,阻止表单提交    }    if (dateOfBirth === "") {        alert('请输入您的出生日期');        f1.date.focus();        return false;    }    if (selectedGender === "") {        alert('请选择性别');        return false;    }    // 如果所有验证都通过,则显示模态框    myModal.style.display = "block";    return false; // 验证成功,但阻止表单的默认提交行为(因为我们已经通过JS处理了)}// 如果使用这种方式,HTML按钮需要改为:// // 注意:如果使用 type="submit" 且 onclick 返回 false,它也会阻止提交。// 但更推荐使用 addEventListener('submit') 来处理。*/

关键点解析:

获取元素引用: 在脚本开始时,使用 document.getElementById() 和 document.getElementsByClassName() 获取模态框、关闭按钮和表单的DOM引用。模态框关闭事件: closeBtn.onclick 和 window.onclick 事件监听器用于在用户点击关闭按钮或模态框外部区域时隐藏模态框。这些事件监听器只需要绑定一次。表单提交拦截: 使用 applicationForm.addEventListener(‘submit’, function(event) { … }) 来监听表单的提交事件。event.preventDefault() 是关键,它阻止了浏览器执行表单的默认提交行为(通常是页面刷新),从而允许我们完全通过JavaScript控制后续流程。表单字段访问: 可以通过 applicationForm.fieldName.value 的方式直接访问表单字段的值。对于单选按钮组,需要遍历 genderRadios 集合来找到被选中的值。验证逻辑: 针对每个必填字段进行检查。如果任何字段不符合要求,通过 alert() 提示用户,并将焦点设置到相应字段,然后 return; 退出函数,阻止模态框的显示。显示模态框: 如果所有验证都通过,将 myModal.style.display 设置为 “block”,使模态框可见。

6. 总结与最佳实践

通过上述步骤,您已经成功实现了一个功能完善的表单验证与模态框反馈系统。为了进一步提升用户体验和代码质量,可以考虑以下最佳实践:

更友好的错误提示: 避免使用 alert()。改为在表单字段下方显示内联错误消息,提供即时反馈。异步提交: 如果需要将表单数据发送到服务器,可以使用 fetch API 或 XMLHttpRequest 进行异步提交(AJAX),避免页面刷新。CSS过渡效果: 为模态框的显示和隐藏添加CSS transition 属性,使其动画效果更平滑。可访问性(Accessibility): 为模态框添加ARIA属性,确保屏幕阅读器用户也能理解和操作。例如,使用 aria-modal=”true” 和 aria-labelledby。代码模块化: 将验证逻辑、模态框控制逻辑等封装成独立的函数或模块,提高代码的可维护性。避免内联事件处理: 尽量避免在HTML元素中使用 onclick=”return valid()” 这样的内联事件处理器,而是使用 addEventListener 在JavaScript中统一管理事件,这有助于分离结构和行为。

通过遵循这些原则,您可以构建出更加健壮、用户友好且易于维护的Web表单应用。

以上就是实现表单验证后显示带有链接的弹出提示框教程的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1519661.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
通过Web API实现JavaScript与Python的数据交互
上一篇 2025年12月20日 12:37:26
在Node.js异步请求中调用Python子进程并处理数据
下一篇 2025年12月20日 12:37:53

相关推荐

  • OOP类图在Java面向对象建模中的作用

    类图是Java面向对象建模的核心工具,通过图形化展示类、属性、方法及关系,明确职责边界,支持封装、继承、实现、聚合等机制,揭示对象协作,助力高内聚设计,促进团队沟通,统一UML标准,辅助代码生成与重构,并为应用工厂模式等设计模式提供可视化基础,是连接需求与实现的关键桥梁。 在Java面向对象建模中,…

    2026年9月25日
    100
  • sublime怎么在侧边栏中直接新建文件和文件夹_sublime侧边栏添加文件夹的操作方法

    sublime怎么在侧边栏中直接新建文件和文件夹_sublime侧边栏添加文件夹的操作方法sublime怎么在侧边栏中直接新建文件和文件夹_sublime侧边栏添加文件夹的操作方法sublime怎么在侧边栏中直接新建文件和文件夹_sublime侧边栏添加文件夹的操作方法sublime怎么在侧边栏中直接新建文件和文件夹_sublime侧边栏添加文件夹的操作方法

    在Sublime Text中侧边栏可通过右键菜单新建文件或文件夹:1. 右键目标目录选New File并输入名称即可创建文件;2. 同样操作选New Folder可创建文件夹;3. 确保侧边栏可见且已添加项目,使用Ctrl+K, Ctrl+B切换显示,通过File→Add Folder to Pro…

    2026年9月25日 • 用户投稿
    400
  • sublime如何给代码添加注释 _sublime代码注释技巧

    sublime如何给代码添加注释 _sublime代码注释技巧sublime如何给代码添加注释 _sublime代码注释技巧sublime如何给代码添加注释 _sublime代码注释技巧sublime如何给代码添加注释 _sublime代码注释技巧

    Sublime Text中注释操作统一高效:1. 使用Ctrl+/(Cmd+/)添加单行或多行注释,Ctrl+Shift+/(Cmd+Shift+/)添加块注释;2. 自动识别语言语法生成对应注释符号(如//、#、等);3. 可通过Package Control安装DocBlockr、Comment…

    2026年9月25日 • 用户投稿
    100
  • 微软Defender更新导致误删除开始菜单和任务栏快捷方式

    微软Defender更新导致误删除开始菜单和任务栏快捷方式微软Defender更新导致误删除开始菜单和任务栏快捷方式微软Defender更新导致误删除开始菜单和任务栏快捷方式微软Defender更新导致误删除开始菜单和任务栏快捷方式

    在最近一次微软microsoft defender防病毒软件的更新中,有用户反馈称其系统的开始菜单和任务栏中的应用程序快捷方式.lnk文件被意外删除。具体表现为,在安装了microsoft defender杀毒软件的1.381.2140.0版本的安全情报更新后,无论是开始菜单里的快捷方式、固定在任务…

    2026年9月25日 • 用户投稿
    400
  • 从文件解析游戏物品数据:Java实现教程

    从文件解析游戏物品数据:Java实现教程从文件解析游戏物品数据:Java实现教程从文件解析游戏物品数据:Java实现教程从文件解析游戏物品数据:Java实现教程

    本教程详细介绍了如何从文本文件中解析结构化的游戏物品数据,例如itemName:(“Steel Sword”),itemStats(2,0,0);。通过构建一个Item类来封装物品属性,并利用Java的文件I/O和字符串处理功能,实现数据的读取、解析和存储到对象列表中,从而为…

    2026年9月25日 • 用户投稿
    000
  • 夸克网盘分享链接怎么打开_夸克分享链接查看与保存教程

    夸克网盘分享链接怎么打开_夸克分享链接查看与保存教程夸克网盘分享链接怎么打开_夸克分享链接查看与保存教程夸克网盘分享链接怎么打开_夸克分享链接查看与保存教程夸克网盘分享链接怎么打开_夸克分享链接查看与保存教程

    首先通过夸克App粘贴链接并搜索,输入提取码后点击保存到网盘;若无App可用浏览器打开下载;私密链接需准确输入提取码;批量文件可编辑后全选转存。 如果您收到一个夸克网盘的分享链接,但无法正常访问或保存文件,可能是由于未正确登录账号或操作步骤有误。以下是打开并保存夸克网盘分享链接的具体方法。 本文运行…

    2026年9月25日 • 用户投稿
    000
  • JBoss EAP 中 JMS MDB 消息丢失问题的诊断与解决

    JBoss EAP 中 JMS MDB 消息丢失问题的诊断与解决JBoss EAP 中 JMS MDB 消息丢失问题的诊断与解决JBoss EAP 中 JMS MDB 消息丢失问题的诊断与解决JBoss EAP 中 JMS MDB 消息丢失问题的诊断与解决

    在JBoss EAP环境中,当JMS消息驱动Bean(MDB)似乎间歇性丢失消息时,常见的原因并非消息真正丢失,而是被意外的消费者处理。通过分析JMS队列的运行时指标,特别是消费者数量与预期不符时,通常可以发现存在重复或多余的MDB部署。本教程将指导您如何诊断此类问题,利用JBoss CLI工具识别…

    2026年9月25日 • 用户投稿
    000
  • Android Activity中集成自定义类功能的委托模式实践

    Android Activity中集成自定义类功能的委托模式实践Android Activity中集成自定义类功能的委托模式实践Android Activity中集成自定义类功能的委托模式实践Android Activity中集成自定义类功能的委托模式实践

    本文旨在解决Android开发中,Activity需要继承AppCompatActivity同时又想复用自定义类功能(如HereMapClass)时的“多重继承”问题。由于Java不支持多重继承,我们将深入探讨并实践委托模式(Delegation Pattern),这是一种优雅且高效的设计模式,允许…

    2026年9月25日 • 用户投稿
    000
  • sublime如何比较两个文件的差异 _sublime文件对比技巧

    sublime如何比较两个文件的差异 _sublime文件对比技巧sublime如何比较两个文件的差异 _sublime文件对比技巧sublime如何比较两个文件的差异 _sublime文件对比技巧sublime如何比较两个文件的差异 _sublime文件对比技巧

    Sublime Text可通过插件或外部工具实现文件对比。1. 使用内置Diff功能可高亮显示两文件差异行,适合小范围对比;2. 安装Diff插件后可在新标签页查看带+/-标记的差异结果;3. 配合Beyond Compare等第三方工具实现可视化并排对比,需通过External Tools类插件配…

    2026年9月25日 • 用户投稿
    000
  • 阅站漫画电脑版设置方法

    阅站漫画电脑版设置方法阅站漫画电脑版设置方法阅站漫画电脑版设置方法阅站漫画电脑版设置方法

    如何在阅站漫画浏览器中切换至电脑版?具体操作步骤如下所示。 1、 打开阅站漫画首页,点击右下角的相应图标即可进入下一步。 2、 进入设置界面后,找到“浏览器标识”选项并点击进入。 触站AI 专业的中文版AI绘画生成平台 78 查看详情 3、 在列表中选择“电脑”模式,即可成功切换为电脑版浏览。 以上…

    2026年9月25日 • 用户投稿
    000
  • 解决Spark RDD到DataFrame中Byte转Long的运行时异常

    解决Spark RDD到DataFrame中Byte转Long的运行时异常解决Spark RDD到DataFrame中Byte转Long的运行时异常解决Spark RDD到DataFrame中Byte转Long的运行时异常解决Spark RDD到DataFrame中Byte转Long的运行时异常

    本文针对Spark RDD转换为DataFrame时,Byte类型数据无法隐式转换为LongType导致java.lang.RuntimeException的问题,提供了详细的解决方案。核心在于通过在创建RDD[Row]时,对Byte类型字段进行显式toLong转换,确保数据类型与目标DataFra…

    2026年9月25日 • 用户投稿
    000
  • 夸克怎么更换账号登录_夸克App切换与更换账号方法

    夸克怎么更换账号登录_夸克App切换与更换账号方法夸克怎么更换账号登录_夸克App切换与更换账号方法夸克怎么更换账号登录_夸克App切换与更换账号方法夸克怎么更换账号登录_夸克App切换与更换账号方法

    1、可通过设置或个人中心切换账号,若需登录新账号则先退出当前账号再重新登录。 如果您在使用夸克App时需要登录其他账号,但当前账号未退出或未提供切换选项,则可能是由于操作路径不明确。以下是完成账号更换的具体步骤: 本文运行环境:iPhone 15 Pro,iOS 18 一、通过设置菜单切换账号 该方…

    2026年9月25日 • 用户投稿
    500
  • 为你分享电脑CPU的五大常见故障及解决方案

    为你分享电脑CPU的五大常见故障及解决方案为你分享电脑CPU的五大常见故障及解决方案为你分享电脑CPU的五大常见故障及解决方案为你分享电脑CPU的五大常见故障及解决方案

    cpu,即“中央处理器”,常被称为计算机的“大脑”。通常情况下,cpu本身极不容易发生故障,大多数问题往往源于用户在使用过程中的疏忽或不当操作。一旦电脑出现异常,很多人会慌乱无措,甚至误以为是严重硬件损坏,但实际上,许多看似复杂的cpu相关故障,其实都可以通过简单的排查自行解决。本文将为大家介绍五个…

    2026年9月25日 • 用户投稿
    000
  • 神游续作《Hades 2》上线! 耕升RTX 5060 追风 OC再闯冥界!

    神游续作《Hades 2》上线! 耕升RTX 5060 追风 OC再闯冥界!神游续作《Hades 2》上线! 耕升RTX 5060 追风 OC再闯冥界!神游续作《Hades 2》上线! 耕升RTX 5060 追风 OC再闯冥界!神游续作《Hades 2》上线! 耕升RTX 5060 追风 OC再闯冥界!

    由独立团队Supergiant倾力打造的动作冒险大作《Hades》凭借其凌厉的战斗系统与深厚的希腊神话背景,曾风靡全球,被誉为现代独立Roguelike游戏的标杆之作。就在9月26日,历经一年半抢先体验阶段的续作《Hades 2》正式登陆PC平台。发售后迅速登顶Steam热销榜单,目前收获高达95%…

    2026年9月25日 • 用户投稿
    100
  • JBoss EAP 7.2:JMS MDB 消息丢失问题排查与解决

    JBoss EAP 7.2:JMS MDB 消息丢失问题排查与解决JBoss EAP 7.2:JMS MDB 消息丢失问题排查与解决JBoss EAP 7.2:JMS MDB 消息丢失问题排查与解决JBoss EAP 7.2:JMS MDB 消息丢失问题排查与解决

    本文旨在帮助开发者排查和解决 JBoss EAP 7.2 环境下 JMS MDB 消息丢失的问题。通过分析 JMS 队列的运行时状态,确定是否存在多个消费者,并提供相应的排查命令,最终解决消息无法被 MDB 消费的问题。 在 JBoss EAP 7.2 中,当使用 JMS 消息驱动 Bean (MD…

    2026年9月25日 • 用户投稿
    000
  • 360极速浏览器和Chrome哪个更好用_360极速浏览器与Chrome浏览器对比评测

    360极速浏览器和Chrome哪个更好用_360极速浏览器与Chrome浏览器对比评测360极速浏览器和Chrome哪个更好用_360极速浏览器与Chrome浏览器对比评测360极速浏览器和Chrome哪个更好用_360极速浏览器与Chrome浏览器对比评测360极速浏览器和Chrome哪个更好用_360极速浏览器与Chrome浏览器对比评测

    360极速浏览器在兼容旧版网站、内存优化和本地化功能上占优,适合需要访问网银等特殊场景的国内用户;Chrome则凭借V8引擎性能、成熟的扩展生态和跨平台同步能力,在现代网页体验与隐私安全方面表现更佳。两者均基于Chromium内核,但在IE兼容模式、广告拦截集成度、资源占用控制及账户体系设计上存在差…

    2026年9月25日 • 用户投稿
    100
  • 悟空浏览器实验性功能(flags)在哪里开启_悟空浏览器Flags实验室入口及设置教程

    首先进入悟空浏览器地址栏输入chrome://flags,找到实验性功能后通过搜索启用如“视频悬浮”等功能,需重启生效;若出现问题可重置所有设置恢复默认。 如果您在使用悟空浏览器时希望启用一些尚未正式发布的功能,可能需要通过浏览器的实验性功能页面(Flags)进行设置。这类功能通常用于测试新特性或优…

    2026年9月25日
    000
  • 王者荣耀大仙杯报名指南

    王者荣耀大仙杯报名指南王者荣耀大仙杯报名指南王者荣耀大仙杯报名指南王者荣耀大仙杯报名指南

    进入《王者荣耀》游戏后,点击进入微赛事平台。 在赛事列表中找到大仙杯,点击并完成报名操作。 NameGPT名称生成器 免费AI公司名称生成器,AI在线生成企业名称,注册公司名称起名大全。 0 查看详情 打开王者营地APP,搜索并关注主播张大仙的官方账号。 关注成功后,前往活动页面领取专属语音包,完成…

    2026年9月25日 • 用户投稿
    300
  • 鸣潮2.6版本更新公告-鸣潮2.6版本更新内容一览

    鸣潮2.6版本更新公告-鸣潮2.6版本更新内容一览鸣潮2.6版本更新公告-鸣潮2.6版本更新内容一览鸣潮2.6版本更新公告-鸣潮2.6版本更新内容一览鸣潮2.6版本更新公告-鸣潮2.6版本更新内容一览

    鸣潮将于8月28日迎来2.6版本的更新,届时将带来全新区域、角色及多项精彩内容。以下是本次2.6版本的详细更新汇总。 鸣潮2.6版本更新公告【维护时间 & 补偿说明】 ✦ 更新维护时间:2025年8月28日 04:00 ~ 11:00(UTC+8) ✦ 更新补偿内容:星声×300、结晶溶剂×…

    2026年9月25日 • 用户投稿
    600
  • VSCode如何配置Dart开发环境 VSCode跨平台应用开发全攻略

    安装vscode并下载flutter sdk,将其bin目录添加到系统path环境变量;2. 在vscode中安装flutter扩展(自动包含dart扩展);3. 运行flutter doctor检查并修复环境配置问题,如android/ios工具链;4. 通过flutter create创建项目或…

    2026年9月25日
    100

发表回复

登录后才能评论
关注微信