【原创】基于Bootstrap的Modal二次封装
前言
Bootstrap:Twitter推出的一个开源的用于前端开发的工具包。它由Twitter的设计师Mark Otto和Jacob Thornton合作开发,是一个CSS/HTML框架
1.Bootstrap Modals(模态框)基本用法
使用bootstrap之前需要应用jquery.js和bootstrap.js以及bootstrap.css 注意:最新版的bootstrap需要和jquery1.9以上版本配合使用

<!-- 按钮触发模态框 -->
<button class="btn btn-primary btn-lg" data-toggle="modal"
data-target="#myModal">
开始演示模态框
</button>
<div class="modal fade" id="myModal" 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">
×
</button>
<h4 class="modal-title" id="myModalLabel">
模态框(Modal)标题
</h4>
</div>
<div class="modal-body">
在这里添加一些文本
</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>
当我们点击button的时候会触发Modal,效果如下图所示

2.0先看我们的封装代码
$(function () {
if ($.fn.modal) {
$.fn.modal.defaults.spinner = $.fn.modalmanager.defaults.spinner =
'<div class="loading-spinner" style="width: 200px; margin-left: -100px;">' +
'<div class="progress progress-striped active">' +
'<div class="progress-bar" style="width: 100%;"></div>' +
'</div>' +
'</div>';
$.fn.modalmanager.defaults.resize = true;
}
window.Modal = function () {
var _tplHtml = '<div class="modal created-modal" id="[Id]">' +
'<div class="modal-header">' +
'<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>' +
'<h5 class="modal-title"><i class="icon-exclamation-sign"></i> [Title]</h5>' +
'</div>' +
'<div class="modal-body small">' +
'<p>[Message]</p>' +
'</div>' +
'<div class="modal-footer" >' +
'<button type="button" class="btn btn-primary ok" data-dismiss="modal">[BtnOk]</button>' +
'<button type="button" class="btn btn-default cancel" data-dismiss="modal">[BtnCancel]</button>' +
'</div>' +
'</div>';
var _tplLoadHtml = '<div class="modal created-modal" id="[Id]">' +
'<div class="modal-header">' +
'<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>' +
'<h5 class="modal-title">[Title]</h5>' +
'</div>' +
'<div class="modal-body small">' +
'<iframe src="[Url]" frameborder="0" width="100%" height="[Height]px" style="padding:0px; margin:0px;"></iframe>' +
'</div>' +
'</div>';
var reg = new RegExp("\\[([^\\[\\]]*?)\\]", 'igm');
var _alert = function (options) {
var id = _dialog(options);
var modal = $('#' + id);
modal.find('.ok').removeClass('btn-success').addClass('btn-primary');
modal.find('.cancel').hide();
return {
id: id,
on: function (callback) {
if (callback && callback instanceof Function) {
modal.find('.ok').click(function () { callback(true); });
}
},
hide: function (callback) {
if (callback && callback instanceof Function) {
modal.on('hide.bs.modal', function (e) {
callback(e);
});
}
}
};
};
var _confirm = function (options) {
var id = _dialog(options);
var modal = $('#' + id);
modal.find('.ok').removeClass('btn-primary').addClass('btn-success');
modal.find('.cancel').show();
return {
id: id,
on: function (callback) {
if (callback && callback instanceof Function) {
modal.find('.ok').click(function () { callback(true); });
modal.find('.cancel').click(function () { callback(false); });
}
},
hide: function (callback) {
if (callback && callback instanceof Function) {
modal.on('hide.bs.modal', function (e) {
callback(e);
});
}
}
};
};
var _load = function (options) {
var ops = {
url: '',
title: '',
width: ,
height:
};
$.extend(ops, options);
var modalId = _getId();
var html = _tplLoadHtml.replace(reg, function (node, key) {
return {
Id: modalId,
Title: ops.title,
Url: ops.url,
Height: ops.height
}[key];
});
$('body').append(html);
var modal = $('#' + modalId).modal({
width: ops.width
});
$('#' + modalId).on('hide.bs.modal', function (e) {
$(this).parent('.modal-scrollable').next().remove();
$(this).parent('.modal-scrollable').remove();
$('body').modalmanager('toggleModalOpen');
});
}
var _getId = function () {
var date = new Date();
return 'mdl' + date.valueOf();
}
var _dialog = function (options) {
var ops = {
msg: "提示内容",
title: "操作提示",
btnok: "确定",
btncl: "取消",
width: ,
auto: false
};
$.extend(ops, options);
var modalId = _getId();
var html = _tplHtml.replace(reg, function (node, key) {
return {
Id: modalId,
Title: ops.title,
Message: ops.msg,
BtnOk: ops.btnok,
BtnCancel: ops.btncl
}[key];
});
$('body').append(html);
$('#' + modalId).modal({
width: ops.width,
backdrop: 'static'
});
$('#' + modalId).on('hide.bs.modal', function (e) {
//$(this).parent('.modal-scrollable').next().remove();
//$(this).parent('.modal-scrollable').remove();
$('body').modalmanager('toggleModalOpen');
});
return modalId;
}
var _cancelCheckbox = function () {
//设置取消样式
$(".datagrid-header-check .checker").find("span").attr("class", "");//取消头部第一个checkbox的样式
$(".datagrid-cell-check .checker").find("span").attr("class", "");//取消列表选中checkbox的样式
$(".datagrid-btable").find("tr").attr("class", "datagrid-row");//取消选中行的样式
$(":checkbox:checked").attr("checked", false); //取消所有选中状态
};
return {
alert: _alert,
confirm: _confirm,
load: _load,
cancelcheck: _cancelCheckbox,
loading: function () {
$('body').modalmanager('loading');
},
removeLoading: function () {
$('body').modalmanager('removeLoading');
}
}
}();
});
3.0接下来看我们的案例代码
@{
Layout = null;
}
//这里引入的文件要按照顺序
<script src="~/Scripts/jquery-1.8.2.min.js"></script>
<script src="~/Scripts/bootstrap/js/bootstrap.min.js"></script>
<script src="~/Scripts/bootstrap-modal/js/bootstrap-modal.js"></script>
<script src="~/Scripts/bootstrap-modal/js/bootstrap-modalmanager.js"></script>
<script src="~/Scripts/feng_modal.js"></script>
<link href="~/Scripts/bootstrap/css/bootstrap.min.css" rel="stylesheet" />
<link href="~/Scripts/bootstrap-modal/css/bootstrap-modal.css" rel="stylesheet" />
<link href="~/Scripts/bootstrap-modal/css/bootstrap-modal-bs3patch.css" rel="stylesheet" />
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div style="margin:500px" >
<button type="button" class="btn btn-primary" onclick="testalert()">测试alert</button>
<button type="button" class="btn btn-success" onclick="testload()">测试load</button>
<button type="button" class="btn btn-warning" onclick="testconfirm()">测试confirm</button>
<button type="button" class="btn btn-danger">测试</button>
</div>
</body>
</html>
<script type="text/javascript">
function testalert() {
Modal.alert({msg:"测试"});
}
function testload() {
Modal.load({ msg: "测试", url: "/Home/GetMsg/", title: "远程加载页面", width: , height: });
}
function testconfirm() {
Modal.confirm({ msg: "确认要加载吗?" }).on(function (e) {
if (e) {
Modal.load({ msg: "测试", url: "/Home/GetMsg/", title: "远程加载页面", width: , height: });
}
});
}
</script>
4.0看我们达到的效果




【原创】基于Bootstrap的Modal二次封装的更多相关文章
- python+selenium十:基于原生selenium的二次封装
from selenium import webdriverfrom selenium.webdriver.support.wait import WebDriverWaitfrom selenium ...
- 利用bootstrap的modal组件自定义alert,confirm和modal对话框
由于浏览器提供的alert和confirm框体验不好,而且浏览器没有提供一个标准的以对话框的形式显示自定义HTML的弹框函数,所以很多项目都会自定义对话框组件.本篇文章介绍自己在项目中基于bootst ...
- 基于bootstrap模态框的alert弹窗
完成的效果如下: html代码: <!-- 弹出框 --> <div class="modal fade" id="alert_like" t ...
- OkGo3.0 --真实项目使用和二次封装(转)
转载:https://blog.csdn.net/jiushiwo12340/article/details/79011480 11.OkGo3.0真实项目使用和二次封装: ==== 11.OkG ...
- python+selenium十:selenium的二次封装
python+selenium十:基于原生selenium的二次封装 from selenium import webdriverfrom selenium.webdriver.support.w ...
- 基于bootstrap table配置的二次封装
准备 jQuery js css 引用完毕 开始 如果对bootstrap table 的方法与事件不熟悉: Bootstrap table方法,Bootstrap table事件 <table ...
- 基于Dapper二次封装了一个易用的ORM工具类:SqlDapperUtil
基于Dapper二次封装了一个易用的ORM工具类:SqlDapperUtil,把日常能用到的各种CRUD都进行了简化封装,让普通程序员只需关注业务即可,因为非常简单,故直接贴源代码,大家若需使用可以直 ...
- 使用Vue CLI 3将基于element-ui二次封装的组件发布到npm
前言:之前在网上找的好多都是基于vue-cli 2.x的,而使用vue-cli 3的文章比较少,Vue CLI 3 中文文档,所以我在自己尝试的时候把几篇文章结合了一下,调出来了我想要的模式,也就是V ...
- android基于开源网络框架asychhttpclient,二次封装为通用网络请求组件
网络请求是全部App都不可缺少的功能,假设每次开发都重写一次网络请求或者将曾经的代码拷贝到新的App中,不是非常合理,出于此目的,我希望将整个网络请求框架独立出来,与业务逻辑分隔开,这样就能够避免每次 ...
随机推荐
- Java输入输出技术
输入输出分类 输入流,相对计算机来说是输入的,例如鼠标键盘操作,设备给计算机的信息 输出流,相对计算机来说是输出的,例如屏幕显示,计算机给设备的信息. 具体分类 基本流,I ...
- (转)ASP.NET MVC 第五个预览版和表单提交场景
转自:http://ourlife.blog.51cto.com/708821/296171 上个星期四,ASP.NET MVC开发团队发布了ASP.NET MVC框架的“第五个预览版”.你可以在这里 ...
- 20145232 韩文浩 《Java程序设计》第4周学习总结
教材学习内容总结 · Chapter 继承与多态 继承:避免多个类间重复定义共同行为.继承可以理解为一个对象从另一个对象获取属性的过程. 所有Java的类均是由java.lang.Object类继承而 ...
- 20155326刘美岑 2016-2017-2 《Java程序设计》第二周学习总结
20155326刘美岑 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 教材第三章主要讲解的是基础语法,主要包括认识类型与变量.学习运算符的基本使用.了解类型 ...
- 第一次Java实验
模仿JavaAppArguments.java实例,编写一个程序,此程序从命令行接受多个数字,求和之后输出. 1.设计思路:命令行参数都是字符串,必须将其转化成数字才能相加,定义一个数组接收字符串 ...
- PAT甲级 1126. Eulerian Path (25)
1126. Eulerian Path (25) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue In grap ...
- Codeforces816B Karen and Coffee 2017-06-27 15:18 39人阅读 评论(0) 收藏
B. Karen and Coffee time limit per test 2.5 seconds memory limit per test 512 megabytes input standa ...
- JVM虚拟机-类加载器子系统
转自博客:http://www.cnblogs.com/muffe/p/3541189.html 还有一些自己补充的知识点 一.类加载器基本概念 顾名思义,类加载器(class loader)用来 ...
- 关于国密算法 SM1,SM2,SM3,SM4 的笔记
国密即国家密码局认定的国产密码算法.主要有SM1,SM2,SM3,SM4.密钥长度和分组长度均为128位. SM1 为对称加密.其加密强度与AES相当.该算法不公开,调用该算法时,需要通过加密芯片的接 ...
- centos下添加epel源
RHEL以及他的衍生发行版如CentOS.Scientific Linux为了稳定,官方的rpm repository提供的rpm包往往是很滞后的,当然了,这样做这是无可厚非的,毕竟这是服务器版本,安 ...