IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Bootstrap模态框的基本使用2.0(复制可用) -> 正文阅读

[JavaScript知识库]Bootstrap模态框的基本使用2.0(复制可用)

一、说明

二、调整了哪些

  • [ 新增(css控制弹出) ] 操作不用.saveModal.click(function(){})点击事件,改为 data-toggle="modal" data-target="#modal-addOrEdit" 属性控制
  • [ 编辑 ] 操作不用.saveModal.click(function(){})点击事件,改为 editContent(1) 方法控制
  • [ 删除 ]
    • 点击方法从 _confirm('确定要删除[来日方长]吗? ','_delete',1),调整为 delContent('来日方长', 1)
    • 模态框直接定义在html中;不再在js中拼接,再$('body').append(str);
    • 模态框隐藏从删除元素$('#modalConfirm,.modal-backdrop').remove(); 改为隐藏元素 $('#modalConfirm').modal('hide');
  • [ 弹窗 ]
    • 模态框直接定义在html中;不再在js中拼接,再$('body').append(str);
    • 模态框隐藏从删除元素$('#modalTip,.modal-backdrop').remove(); 改为隐藏元素 $('#modalTip').modal('hide');

三、新增(css控制弹出) 按钮说明

  • 由于 新增(css控制弹出)编辑 是引用的同一个模态框;新增是通过元素显示隐藏来实现的,并没有事件来控制。
  • 这就导致,如果表单已有数据(编辑之后:取消,点击 ×),再点击新增的时候,表单是有数据的。
  • 这个小问题,请根据实际情况进行调整:
    • 法1、已经实现,新增(事件控制弹出) 按钮。把新增弹窗改为和编辑弹窗一样,通过点击事件控制,在点击事件中重置表单 _reset(obj)
    • 法2、给编辑的 取消× 加上事件,事件中加上表单重置方法 _reset(obj)确定 按钮中已加上。
    • 法3、实际应用中:新增,编辑 在后台是不同的控制器。实际情况中可用模板引擎直接从后端传到前端页面,用模板引擎语法直接渲染数据;或者传info到页面,再用vue的:value v-model数据绑定也行。

四、代码

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
    <title>Bootstrap基本增删改 2.0</title>
    <!-- Bootstrap -->
    <link href="http://apps.bdimg.com/libs/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet">
    <!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
    <script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
    <!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
    <script src="http://apps.bdimg.com/libs/bootstrap/3.3.0/js/bootstrap.min.js"></script>

    <style>

    </style>
</head>
<body>

<!-- 内容都放在这个里面 -->
<nav class="navbar navbar-default">
    <div class="container-fluid">
        <!-- Collect the nav links, forms, and other content for toggling -->
        <div class="collapse navbar-collapse">
            <ul class="nav navbar-nav">
                <li class="active"><a href="#">Bootstrap案例</a></li>
            </ul>
            <form class="navbar-form navbar-right">
                <div class="form-group">
                    <input type="text" name="keyword" class="form-control" placeholder="请输入关键字">
                </div>
                <button class="btn btn-default" onclick="vmt_form_search()">查询</button>
            </form>
        </div><!-- /.navbar-collapse -->
    </div><!-- /.container-fluid -->
</nav>

<div style="margin:20px;">
    <!-- 新增按钮 -->
    <div style="margin:10px;">
        <button class="btn btn-primary" data-toggle="modal" data-target="#modal-addOrEdit">新增(css控制弹出)</button>
        <button class="btn btn-primary" onclick="addContent()">新增(事件控制弹出)</button>
        <button class="btn btn-primary" onclick=output_excel()>查看视频</button>
    </div>

    <!-- 表格 START -->
    <table class="table table-striped table-bordered">
        <tr class="active">
            <th>标题</th>
            <th>图片</th>
            <th>类型</th>
            <th width=200px>创建时间</th>
            <th width=150px>操作</th>
        </tr>
        <tr class="success">
            <th>来日方长</th>
            <th>
                <a href="#" target="_blank">
                    查看
                </a>
            </th>
            <th>无限</th>
            <th>2018-07-31</th>
            <th>
                <button class="btn btn-primary btn-sm" onclick="editContent(1)">编辑</button>
                <button class="btn btn-primary btn-sm" onclick="delContent('来日方长', 1)">删除</button>
            </th>
        </tr>
        <tr class="info">
            <th>来日并不方长</th>
            <th>
                <a href="#" target="_blank">
                    查看
                </a>
            </th>
            <th>有限</th>
            <th>2018-07-31</th>
            <th>
                <button class="btn btn-primary btn-sm" onclick="editContent(2)">编辑</button>
                <button class="btn btn-primary btn-sm" onclick="delContent('来日并不方长', 2)">删除</button>
            </th>
        </tr>
        <tr class="warning">
            <th>来日方长2号</th>
            <th>
                <a href="#" target="_blank">
                    查看
                </a>
            </th>
            <th>无限</th>
            <th>2018-07-31</th>
            <th>
                <button class="btn btn-primary btn-sm" onclick="editContent(3)">编辑</button>
                <button class="btn btn-primary btn-sm" onclick="delContent('来日方长2号', 3)">删除</button>
            </th>
        </tr>
        <tr class="danger">
            <th>来日并不方长2号</th>
            <th>
                <a href="#" target="_blank">
                    查看
                </a>
            </th>
            <th>有限</th>
            <th>2018-07-31</th>
            <th>
                <button class="btn btn-primary btn-sm" onclick="editContent(4)">编辑</button>
                <button class="btn btn-primary btn-sm" onclick="delContent('来日并不方长2号', 4) ">删除</button>
            </th>
        </tr>
        <tr class="active">
            <th>并不方长</th>
            <th>
                <a href="#" target="_blank">
                    查看
                </a>
            </th>
            <th>其他</th>
            <th>2018-07-31</th>
            <th>
                <button class="btn btn-primary btn-sm" onclick="editContent(5)">编辑</button>
                <button class="btn btn-primary btn-sm" onclick="delContent('并不方长', 5) ">删除</button>
            </th>
        </tr>
    </table>
    <!-- 表格 END -->
    <!-- 展示页数 -->
    <div style="text-align:center;">
        <nav aria-label="Page navigation">
            <ul class="pagination">
                <li></li>
                <li class="active"><a>1</a></li>
                <li></li>
                <li><span>共 5 行 第1/1  页</span></li>
            </ul>
        </nav>
    </div>
</div>

<!--模态框 弹出[新增|编辑]界面 -->
<div class="modal fade" id="modal-addOrEdit" tabindex="-1" role="dialog"
     aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal"
                        aria-hidden="true">&times;
                </button>
                <h4 class="modal-title" id="myModalLabel">新增</h4>
            </div>
            <!-- 内容 -->
            <div class="modal-body">
                <!-- 表单 -->
                <form id="adduser" class="form-horizontal" role="form">

                    <div class="form-group">
                        <label for="title" class="col-sm-2 control-label">标题</label>
                        <div class="col-sm-10">
                            <input type="text" class="form-control" id="title" name="title" placeholder="标题">
                        </div>
                    </div>

                    <div class="form-group">
                        <label for="url" class="col-sm-2 control-label">地址</label>
                        <div class="col-sm-10">
                            <input type="text" class="form-control" id="url" name="url" value="http://"
                                   placeholder="图片地址">
                        </div>
                    </div>

                    <div class="form-group">
                        <label class="col-sm-2 control-label">类型</label>
                        <div class="col-sm-10">
                            <div class="radio">
                                <label>
                                    <input type="radio" name="type" value="1" checked/>有限
                                </label>&nbsp;
                                <label class="margin-left-2em">
                                    <input type="radio" name="type" value="2"/>无限
                                </label>&nbsp;
                                <label class="margin-left-2em">
                                    <input type="radio" name="type" value="3"/>其他
                                </label>
                            </div>
                        </div>
                    </div>

                    <!-- 隐藏表单,接收ID -->
                    <div class="form-group">
                        <div class="col-sm-10">
                            <input type="hidden" class="form-control" name="id" value="1">
                        </div>
                    </div>

                </form>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
                <button type="button" class="btn btn-primary saveBtn">确定</button>
            </div>
        </div>
        <!-- /.modal-content -->
    </div>
</div>

<!--模态框 弹出[确认删除]界面 -->
<div class="modal fade" id="modalConfirm" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
                <h4 class="modal-title">温馨提示</h4>
            </div>
            <div class="modal-body" id="delete-message">
                删除的提示内容
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
                <button type="button" class="btn btn-primary">确定</button>
            </div>
        </div>
    </div>
</div>

<!-- 模态框 弹出[消息提示]界面 -->
<div class="modal fade" id="modalTip" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-body" id="api-message">
                消息提示的内容
            </div>
        </div>
    </div>
</div>

<!--模态框 弹出[视频详情]界面 -->
<div class="modal fade" id="vmt_video_detail" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"
     aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content" style="width:900px;height:450px"><!-- 在这设置modal的宽高 -->
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
                <h4 class="modal-title">视频详情</h4>
            </div>
            <!-- 内容 -->
            <div class="modal-body">
                <div>
                    <div style="float:left;width:500px;height:300px;">
                        <video class="vmt_video_src_class" id="vmt_video_src_id" width="500px" height="300px" src=""
                               controls="controls"></video>
                    </div>
                    <div style="margin-left:510px;">
                        <h3 class="vmt_template_name_class"></h3>
                        <ul style="margin-top:30px">
                            <li><p><i class='glyphicon glyphicon-picture'></i>&nbsp;最多30张图片</p></li>
                            <li><p><i class='glyphicon glyphicon-time'></i>&nbsp;最长10分钟</p></li>
                            <li><p><i class='glyphicon glyphicon-object-align-right'></i>&nbsp;不限横竖版</p></li>
                            <li><p><i class='glyphicon glyphicon-fire'></i>&nbsp;已有181人使用</p></li>
                        </ul>

                        <div style="margin-top:75px;margin-left:80px">
                            <a type="button" class="btn btn-info col-md-8 vmt_choose_temp_calss">创建视频</a>
                        </div>
                    </div>
                </div>

            </div>
            <!-- <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
                <button type="button" class="btn btn-primary" οnclick=vmi_saveVideoName(this)>确定</button>
            </div>
             -->
        </div>
        <!-- /.modal-content -->
    </div>
</div>
<!-- 模态框 END -->

<script>
    $(function () {	//关闭视频模态框时,视频停止播放
        $('#vmt_video_detail').on('hide.bs.modal', function () {
            var this_video = $('#vmt_video_src_id')[0];
            this_video.currentTime = 0;    //属性设置或返回音频/视频播放的当前位置(以秒计)。当设置该属性时,播放会跳跃到指定的位置。
            this_video.pause();
        });
    });

    //弹出视频模态框操作,并根据class动态显示模态框中的数据
    function output_excel() {
        $('#vmt_video_detail').modal('show');
        $('#vmt_video_detail').find('.vmt_template_name_class').text('动态显示头');	//动态显示头
        $('#vmt_video_detail').find('.vmt_video_src_class').attr('src', 'http://d.itheima.com:81//dd/Python/Scrapy%E7%88%AC%E8%99%AB%E6%A1%86%E6%9E%B6/00.Scrapy%E6%9E%B6%E6%9E%84%E6%B5%81%E7%A8%8B%E4%BB%8B%E7%BB%8D.mp4');	//动态显示url地址
        //$('#vmt_video_detail').find('.vmt_choose_temp_calss').attr('href', '#');
        $('#vmt_video_detail').find('.vmt_choose_temp_calss').click(function () {
            _alert('点我干嘛!');
            $('#vmt_video_detail').modal('hide'); //模态框隐藏
        });
    }

    //控制新增弹窗事件
    function addContent() {
        var modalElem = '#modal-addOrEdit';
        $(modalElem).find('#myModalLabel').text('新增');//modal头部
        _reset($(modalElem).find('form'));//重置表单
        $(modalElem).modal('show');//显示出弹出层
    }

    //【编辑弹窗】:数据回显,这里为了演示,直接从数组里拿
    function editContent(id) {
        var info = getEditJsonDataById(id); //获取当前数据明细

        var modalElem = '#modal-addOrEdit';

        $(modalElem).find('#myModalLabel').text('编辑 ' + info.title);//modal头部
        // _reset($(modalElem).find('form'));//重置表单

        renderDataToHtml(info); //数据回显
        $(modalElem).modal('show');//显示出弹出层
    }

    //【添加,编辑确认按钮】
    $('.saveBtn').click(function () {
        let addEditModalId = "#modal-addOrEdit";
        var modalObj = $(this).parents(addEditModalId);//弹出框对象
        var str = modalObj.find('#myModalLabel').text();//moda 头部
        var url = (str == "新增" ? 'add' : 'edit');
        var data = modalObj.find('form').serialize();
        //把这里与后台交互的Ajax直接改为弹出框操作
        /*$.ajax({
            url:url,
            data:data,
            cache:false,
            dataType:'json',
            type:'post',
            success:function(result){
                //成功提示模态框
                if( result === false )
                    _alert( '系统出现问题,请联系管理员!' )
                if(result.status=='success'){
                    _alert(result.message,1);
                    $(addEditModalId).modal('hide');//隐藏
                }else{
                    //失败提示模态框
                    _alert(result.message)
                }
                _reset($(addEditModalId).find('form'));//重置表单
            },
            error:function(){
                _alert('系统出现问题,请联系管理员!');
                _reset($(addEditModalId).find('form'));//重置表单
            }
        });*/
        //START 模拟成功
        _alert('模拟 ' + str + ' 成功!', 1);
        $(addEditModalId).modal('hide'); //模态框隐藏

        _reset($(addEditModalId).find('form'));//重置表单

        //END 模拟成功
    });

    /*
     * 【删除弹框确认】
     * title 标题
     * params回调函数的参数值 可不填  多参数可用数组形式 例如  delContent('确定要删除该菜单吗? ','delMenu',['1','del'])
     */
    function delContent(title, params) {
        var callbackFun = 'apiTest'; //点击确认 回调函数名称

        var content = "确定删除 " + title + " 吗?";
        $('#delete-message').html(content); //设置确认提示内容

        $('#modalConfirm').modal('show');
        $('#modalConfirm .btn-primary').click(function () {
            if (callbackFun != null)
                window[callbackFun](params);

            //1.0是拼接内容到body中,$('body').append(str);使用remove,现在是本来就在body中,只需hide就行了
            $('#modalConfirm').modal('hide');
            // $('#modalConfirm,.modal-backdrop').remove();
        });
    }

    /*
     * 【表单重置】
     * @params obj  可传对象  也可以传class或id名 示例  _reset($('#id')) _reset('#id')  _reset('.class')  _reset( this )
     */
    function _reset(obj) {
        if (!(obj instanceof jQuery)) { //如果不是对象的话
            obj = $(obj)
        }
        obj[0].reset();//重置表单
        obj.find('input[type="hidden"]').val('');//解决不支持隐藏表单reset的浏览器
    }

    //【数据回显:编辑操作】
    // 实际情况中可用模板引擎直接从后端传到前端页面,用模板引擎语法直接渲染数据;
    // 或者传info到页面,再用vue的:value v-model数据绑定也行
    function renderDataToHtml(data) {
        $("#id").val(data['id']);	//给隐藏表单主键ID赋值
        $("#title").val(data['title']);
        $("#url").val(data['url']);
        $('input[type="radio"][name="type"][value="' + data['type'] + '"]').prop("checked", 'checked');

        //$('#myModal').find("#ausername,#apassword").attr('disabled','disabled');
        //admin与其他用户的不同
        //不能更改超管的角色(隐藏方框)
        /* if(data['username']=='admin'){
            $('#changeStatus,#roleChoose').hide();
        }else{
            $('#changeStatus,#roleChoose').show();
        } */
    }

    //在公共的js页面中加入此段代码,即可禁止所有modal加载缓存的内容!
    /*$('body').on('hidden.bs.modal', '.modal', function () {
        $(this).removeData('bs.modal');
    });*/

    /*
     * 【弹出提示框,2秒后消失】
     * content 提示内容
     * url 跳转链接  1本地刷新  链接跳转 可不传 不传不跳转
     */
    function _alert(content, url) {
        $('#api-message').html(content); //设置消息提示内容
        $('#modalTip').modal('show');
        setTimeout(function () {

            //1.0是拼接内容到body中,$('body').append(str);使用remove,现在是本来就在body中,只需hide就行了
            $('#modalTip').modal('hide');
            // $('#modalTip,.modal-backdrop').remove();
            if (url != null) {
                //暂时注释页面刷新操作
                /* if(  url == 1 )
                    location.reload();
                else
                    location.href = url; */
            }
        }, 2000)
    }

    /*
     * 【Ajax模拟请求后台接口】
     * @params params id 数据id
     */
    function apiTest(id) {
        $.ajax({
            url: 'delete',
            data: {id: id},
            type: 'get',
            dataType: 'json',
            cache: false,
            success: function (result) {
                if (result.status == 'success') {
                    _alert(result.message, 1);
                } else {
                    _alert(result.message);
                }
            },
            error: function () {
                _alert('系统出现问题,请联系管理员!');
            }
        });
    }

    //前端写死数据用于数据回显
    function getEditJsonDataById(id) {
        var data = [
            '{"id":1,"title":"来日方长","url":"http://1","type":2,"create_time":"2018-07-31"}',
            '{"id":2,"title":"来日并不方长","url":"http://2","type":1,"create_time":"2018-07-31"}',
            '{"id":3,"title":"来日方长2号","url":"http://3","type":2,"create_time":"2018-07-31"}',
            '{"id":4,"title":"来日并不方长2号","url":"http://4","type":1,"create_time":"2018-07-31"}',
            '{"id":5,"title":"并不方长","url":"http://5","type":3,"create_time":"2018-07-31"}',
        ];
        var dataStr = data[id - 1];
        var dataObj = eval('(' + dataStr + ')');	//字符串转json对象
        return dataObj;
    }
</script>
</body>
</html>
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-09-15 01:54:56  更:2022-09-15 01:57:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/11 14:47:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码