JQuery动态插入Bootstrap模态框(Modal)

这里所说的动态插入,是指用JS的append()方式追加元素内容,而不是静态写在HTML里面。

为什么会用到这种方式呢?比如登录框。有些网站在大部分页面都有登录按钮,如果是用Bootstrap的模态框调用的话,常规方式都是写在HTML里面,这就不太方便后期修改,因为你一旦要修改就要动到很多个页面!

这里也不多说什么了,

先看效果图:

这里用到的JQ版本是3.5.1,Bootstrap版本是4.6.1,先来看代码:

var loginModal = "    <div class=\"modal fade\" id=\"loginModal\" tabindex=\"-1\" aria-hidden=\"true\">\n";
loginModal += "        <div class=\"modal-dialog modal-dialog-centered\">\n";
loginModal += "            <div class=\"modal-content\">\n";
loginModal += "                <div class=\"modal-header\">\n";
loginModal += "                    <h5 class=\"modal-title text-info\">会员登录</h5>\n";
loginModal += "                    <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"关闭\">\n";
loginModal += "                        <span aria-hidden=\"true\">×</span>\n";
loginModal += "                    </button>\n";
loginModal += "                </div>\n";
loginModal += "                <div class=\"modal-body px-4\">\n";
loginModal += "                    <form onsubmit=\"return false;\">\n";
loginModal += "                        <div class=\"input-group mb-3\">\n";
loginModal += "                            <div class=\"input-group-prepend\">\n";
loginModal += "                                <span class=\"input-group-text\">\n";
loginModal += "                                    <i class=\"fas fa-mobile-alt fa-fw\"></i>\n";
loginModal += "                                </span>\n";
loginModal += "                            </div>\n";
loginModal += "                            <input type=\"number\" class=\"form-control\" placeholder=\"小米运动账号\" id=\"miPhone\">\n";
loginModal += "                        </div>\n";
loginModal += "                        <div class=\"input-group mb-3\">\n";
loginModal += "                            <div class=\"input-group-prepend\">\n";
loginModal += "                                <span class=\"input-group-text\">\n";
loginModal += "                                    <i class=\"fas fa-lock fa-fw\"></i>\n";
loginModal += "                                </span>\n";
loginModal += "                            </div>\n";
loginModal += "                            <input type=\"password\" class=\"form-control\" placeholder=\"小米运动密码\" id=\"miPassword\">\n";
loginModal += "                        </div>\n";
loginModal += "                        <div class=\"custom-control custom-switch\">\n";
loginModal += "                            <input type=\"checkbox\" class=\"custom-control-input\" id=\"loginRemember\">\n";
loginModal += "                            <label class=\"custom-control-label\" for=\"loginRemember\">记住登录信息</label>\n";
loginModal += "                        </div>\n";
loginModal += "                        <p class=\"text-danger text-center py-2 mb-2\" id=\"loginTips\"></p>\n";
loginModal += "                        <div class=\"text-center\">\n";
loginModal += "                            <input class=\"btn btn-info\" type=\"submit\" id=\"loginSubmit\" value=\"确定登录\">\n";
loginModal += "                            <input class=\"btn btn-warning\" type=\"button\" id=\"loginClear\" value=\"清除信息\">\n";
loginModal += "                        </div>\n";
loginModal += "                    </form>\n";
loginModal += "                </div>\n";
loginModal += "            </div>\n";
loginModal += "        </div>\n";
loginModal += "    </div>";
 
$("#loginBtn").click(function(){
    $("body").append(loginModal); //在body标签的最底部加入模态框代码
 
    $('#loginModal').modal({
        keyboard: false,
        backdrop: 'static'
    });
});

这样就实现了用append()方式在body标签的最底部追加登录的模态框,但是有一个问题,就是你不能一直不停的往页面里加入登录框,所以要做一些改变:

var loginBox = false; //先设置一个状态为false
$("#loginBtn, .login_btn").click(function(){
    if(loginBox == false){ //判断状态为false时追加
        $("body").append(loginModal); //在body标签的最底部加入模态框代码
        loginBox = true; //追加后设置状态为true
    }
    $('#loginModal').modal({
        keyboard: false,
        backdrop: 'static'
    });
});

这样就解决了,然后你会遇到新的问题,就是这时候你用$("#loginSubmit").click()绑定点击事件的时候,无效~

这时候就得换一个思路了,因为登录模态框的内容是后面追加进去的,所以不能直接使用$("#loginSubmit").click()这种方式去绑定,可以用下面的方式:

// append()追加页面之后只能用on,提交登录信息
$('body').on('click','#loginSubmit',function(){
    var tips = $("#loginTips");
    tips.html("");
    var phone = $.trim($("#miPhone").val());
    var password = $.trim($("#miPassword").val());
    if(!/^1\d{10}$/.test(phone)){
        tips.html("请输入正确的账号");
        $("#miPhone").focus();
        return false;
    }else if(password.length < 6){
        tips.html("密码不能少于6位");
        $("#miPassword").focus();
        return false;
    }else{
        $.ajax({
            method: 'post',
            url: "/login",
            dataType: "json",
            data: {phone:phone,password:password},
            success: function (res) {
                if(res.code==200){
                    location.reload();
                }else{
                    tips.html(res.msg);
                    return false;
                }
            },
            error: function (){
                tips.html("网络异常");
                return false;
            }
        });
    }
});

至此,就完美解决了!可以把以上代码放进一个公用的JS文件就可以在每个页面调用了~

案例网址:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/371646.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

目标检测及相关算法介绍

文章目录 目标检测介绍目标检测算法分类目标检测算法模型组成经典目标检测论文 目标检测介绍 目标检测是计算机视觉领域中的一项重要任务&#xff0c;旨在识别图像或视频中的特定对象的位置并将其与不同类别中的对象进行分类。与图像分类任务不同&#xff0c;目标检测不仅需要…

vue全家桶之状态管理Pinia

一、Pinia和Vuex的对比 1.什么是Pinia呢&#xff1f; Pinia&#xff08;发音为/piːnjʌ/&#xff0c;如英语中的“peenya”&#xff09;是最接近pia&#xff08;西班牙语中的菠萝&#xff09;的词&#xff1b; Pinia开始于大概2019年&#xff0c;最初是作为一个实验为Vue重新…

详解C++类和对象(上)

文章目录 写在前面1. 类的定义2. 类的访问限定符及封装2.1 类的访问限定符2.2 封装 3. 类的作用域4. 类的实例化5 类的对象大小的计算6. 类成员函数的this指针 写在前面 类和对象这一章节&#xff0c;分为上、中、下三篇文章进行拆分介绍的&#xff0c;本篇文章介绍了类和对象…

LabVIEW与EtherCAT实现风洞安全联锁及状态监测

LabVIEW与EtherCAT实现风洞安全联锁及状态监测 在现代风洞试验中&#xff0c;安全联锁与状态监测系统发挥着至关重要的作用&#xff0c;确保了试验过程的安全性与高效性。介绍了一套基于EtherCAT总线技术和LabVIEW软件开发的风洞安全联锁及状态监测系统。该系统通过实时、可靠…

C++后端开发之Sylar学习二:配置VSCode远程连接Ubuntu开发

C后端开发之Sylar学习二&#xff1a;配置VSCode远程连接Ubuntu开发 没错&#xff0c;我不能像大佬那样直接在Ubuntu上面用Vim手搓代码&#xff0c;只能在本地配置一下VSCode远程连接Ubuntu进行开发咯&#xff01; 本篇主要是讲解了VSCode如何配置ssh连接Ubuntu&#xff0c;还有…

蓝桥杯每日一题-----数位dp练习

题目 链接 参考代码 写了两个&#xff0c;一个是很久以前写的&#xff0c;一个是最近刚写的&#xff0c;很久以前写的时候还不会数位dp所以写了比较详细的注释&#xff0c;这两个代码主要是设置了不同的记忆数组&#xff0c;通过这两个代码可以理解记忆数组设置的灵活性。 im…

UE4运用C++和框架开发坦克大战教程笔记(十七)(第51~54集)

UE4运用C和框架开发坦克大战教程笔记&#xff08;十七&#xff09;&#xff08;第51~54集&#xff09; 51. UI 框架介绍UE4 使用 UI 所面临的问题以及解决思路关于即将编写的 UI 框架的思维导图 52. 管理类与面板类53. 预加载与直接加载54. UI 首次进入界面 51. UI 框架介绍 U…

【C++】运算符重载详解

&#x1f497;个人主页&#x1f497; ⭐个人专栏——C学习⭐ &#x1f4ab;点击关注&#x1f929;一起学习C语言&#x1f4af;&#x1f4ab; 目录 导读 1. 为什么需要运算符重载 2. 运算符重载概念 3. 运算符重载示例 3.1 运算符重载 3.2 >或<运算符 4. 运算符重…

2024最新最详细【接口测试总结】

序章 ​ 说起接口测试&#xff0c;网上有很多例子&#xff0c;但是当初做为新手的我来说&#xff0c;看了不不知道他们说的什么&#xff0c;觉得接口测试&#xff0c;好高大上。认为学会了接口测试就能屌丝逆袭&#xff0c;走上人生巅峰&#xff0c;迎娶白富美。因此学了点开发…

分享个前端工具-取色调色工具

这里虽然贴了两个&#xff0c;但推荐 Pipette. PipetteWin22.10.22.zip: https://download.csdn.net/download/rainyspring4540/88799632 图标&#xff1a; 界面&#xff1a; ColorPix https://download.csdn.net/download/rainyspring4540/88799642 图标&#xff1a; 界面…

【Spring】自定义注解 + AOP 记录用户的使用日志

目录 ​编辑 自定义注解 AOP 记录用户的使用日志 使用背景 落地实践 一&#xff1a;自定义注解 二&#xff1a;切面配置 三&#xff1a;Api层使用 使用效果 自定义注解 AOP 记录用户的使用日志 使用背景 &#xff08;1&#xff09;在学校项目中&#xff0c;安防平台…

FastAdmin西陆房产系统(xiluHouse)全开源

应用介绍 一款基于FastAdminThinkPHPUniapp开发的西陆房产管理系统&#xff0c;支持小程序、H5、APP&#xff1b;包含房客、房东(高级授权)、经纪人(高级授权)三种身份。核心功能有&#xff1a;新盘销售、房屋租赁、地图找房、房源代理(高级授权)、在线签约(高级授权)、电子合同…

C#实现坐标系转换

已知坐标系的向量线段AB&#xff0c;旋转指定角度后平移到达坐标AB 获取旋转角度以及新的其他坐标转换。 新建窗体应用程序CoordinateTransDemo&#xff0c;将默认的Form1重命名为FormCoordinateTrans&#xff0c;窗体设计如图&#xff1a; 窗体设计代码如下&#xff1a; 部分…

Redis-缓存问题及解决方案

本文已收录于专栏 《中间件合集》 目录 概念说明缓存问题缓存击穿问题描述解决方案 缓存穿透问题描述解决方案 缓存雪崩问题描述解决方案提高缓存可用性过期时间配置熔断降级 总结提升 概念说明 Redis是一个开源的内存数据库&#xff0c;也可以用作缓存系统。它支持多种数据结构…

前端小案例——动态导航栏文字(HTML + CSS, 附源码)

一、前言 实现功能: 这案例是一个具有动态效果的导航栏。导航栏的样式设置了一个灰色的背景&#xff0c;并使用flex布局在水平方向上平均分配了四个选项。每个选项都是一个li元素&#xff0c;包含一个文本和一个横向的下划线。 当鼠标悬停在选项上时&#xff0c;选项的文本颜色…

华为自动驾驶干不过特斯拉?

文 | AUTO芯球 作者 | 李诞 什么&#xff1f; 华为的智能驾驶方案干不过蔚小理&#xff1f; 特斯拉的智能驾驶[FSD]要甩中国车企几条街&#xff1f; 这华为问界阿维塔刚刚推送“全国都能开”的城区“无图 NCA” 就有黑子来喷了 这是跪久了站不起来了吧 作为玩车14年&…

get通过发送Body传参-工具类

1、调用方式 String url "http://ip/xxx/zh/xxxxx/xxxx/userCode"; //进行url中的对应的参数 url2 url2.replace("ip",bancirili); url2 url2.replace("zh",zh); url2 url2.replace("userCode",userCode);String dateTime xxxx; //组…

04. 【Linux教程】安装 Linux 操作系统

通过前面的小节学习&#xff0c;我们已经对 Linux 操作系统有了简单的了解&#xff0c;同时也在 Windows 下安装了虚拟机软件 VMware &#xff0c;那么本节课我们就介绍下如何使用虚拟机软件安装 Linux 操作系统。 通过第一小节的学习我们知道 Linux 有很多的发行版本&#xf…

Vscode配置STM32开发环境(联合Keil MDK/IAR开发)

Vscode配置STM32开发环境&#xff08;替代Keil MDK/IAR&#xff09; 前言 使用了很长时间的Keil5 MDK&#xff0c;以及最近用了一段时间的IAR for ARM&#xff0c;总体来说体验都不是特别的好&#xff0c;Keil功能还行&#xff0c;也不卡顿&#xff0c;就是开发效率、界面样式…

1-2 动手学深度学习v2-基础优化方法-笔记

最常见的算法——梯度下降 当一个模型没有显示解的时候&#xff0c;该怎么办呢&#xff1f; 首先挑选一个参数的随机初始值&#xff0c;可以随便在什么地方都没关系&#xff0c;然后记为 w 0 \pmb{w_{0}} w0​在接下来的时刻里面&#xff0c;我们不断的去更新 w 0 \pmb{w_{0}…