最近项目中,涉及到很多细分领域的东西,有好些目前还没有详细的方案。这是后话,当前起步阶段,我要把握技术路线,搭建基础架构!其中,有好几个地方都用到模态框(Modal), 虽然Bootstrap框架里面有这么一个插件Modal。但是他不是很好用,就比如,因为他可以说是比较原始的JS组件。至少开发一个模态框实现类似Windows的模态框框,居中在显示屏的中间,主要是水平方向居中,不是很方便。

Bootstrap组件的Modal的水平居中,网上有些方案,我也尝试过,不是很稳定,就比如下面:

 <!-- 模态框(Modal) -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-backdrop="static">
<div class="modal-dialog">
<div class="modal-content" style="width: 150%;">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title" id="myModalLabel">站点切换 </h4>
</div>
<div class="modal-body">
<table id="site-table" class="table table-striped table-hover">
<thead>
<tr>
<th>站点ID</th>
<th>站点域名</th>
<th>描述信息</th>
<th>单选按钮</th>
</tr>
</thead>
<tbody>
</tbody>
<!--<tr class="divider"/>-->
</table>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-cancel" data-dismiss="modal"><i class="glyphicon glyphicon-arrow-left"></i>&nbsp;&nbsp;取消 </button>
<button id="siteSwitch" type="button" class="btn btn-success"><i class="glyphicon glyphicon-ok"></i>&nbsp;&nbsp;切换 </button>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->

对应的JS代码:

 <script type="text/javascript">
/* center modal */
function centerModals(){
$('.modal').each(function(i){
var $clone = $(this).clone().css('display', 'block').appendTo('body');
var top = Math.round(($clone.height() - $clone.find('.modal-content').height()) / );
var left = Math.round(($clone.width() - $clone.find('.modal-content').width()) / );
top = top > ? top : ;
left = left > ? left : ;
$clone.remove();
$(this).find('.modal-content').css("margin-top", top).css("margin-left", left);
});
} $(document).ready(function(){
$('.modal').on('show.bs.modal', centerModals);
$(window).on('resize', centerModals); $('#siteSwitchModal').click(function(){
$('#myModal').modal({keyboard: false, show: true});
});
});
</script>

操作逻辑是点击id为siteSwitchModal的按钮,显示出模态框,依据上面的逻辑代码,会出现有时居中,有时有点偏,总之不能稳定的居中,但是,垂直方向上可以居中,由于时间紧,没有时间深入研究,若有高人指点,欢迎!

后来,选择了BootstrapDialog插件,其使用非常的方便,简单,这个插件应该是针对Bootstrap的Modal组件进行的二次开发得到的。为了实现我期望的水平方向居中,只需要下面的配置即可:

 <script src="${basePath}/js/bootstrap-dialog.min.js"></script>
<link href="${basePath}/css/bootstrap-dialog.min.css" rel="stylesheet">
<script type="text/javascript">
$(document).ready(function(){
$('#siteSwitchModal').click(function(){
BootstrapDialog.show({
size: BootstrapDialog.SIZE_WIDE,
title: '站点切换',
closable: true,
draggable: true,
closeByBackdrop: false,
closeByKeyboard: false,
message: $('<div></div>').load('${basePath}/system/site/siteSwitch'),
buttons: [{
label: '取消',
action: function(dialogRef){
dialogRef.close();
}
},{
label: '切换',
cssClass: 'btn-success',
action: function(dialogRef){
dialogRef.close(); //此处的逻辑还未来得及实现
}
}]
});
});
});
</script>

这个看上去很简单,也的确很简单。但是,我遇到了一点小麻烦,那就是我的Dialog中的正文区,希望显示一个table(基于Datatable插件),核心代码,就是

 message: $('<div></div>').load('${basePath}/system/site/siteSwitch'),

利用jQuery的函数load (其实就是一个ajax的请求)从后台拉取html的文件。问题就在这个html的内容上了。如下是我遇到问题的view层模板文件:

 <!DOCTYPE html>
<html>
<head>
4 <script src="${basePath}/js/jquery-1.11.1.min.js"></script>
5 <script src="${basePath}/js/bootstrap.min.js"></script>
6 <script src="${basePath}/js/jquery.dataTables.min.js"></script>
7 <link href="${basePath}/css/bootstrap.min.css" rel="stylesheet">
8 <link href="${basePath}/css/jquery.dataTables.min.css" rel="stylesheet">
9 <link href="${basePath}/css/common.css" rel="stylesheet">

</head> <body>
<div class="container">
<div class="row">
<table id="site-table" class="table site-switch-table">
<thead>
<tr>
<th>站点ID</th>
<th>站点域名</th>
<th>描述信息</th>
<th>单选按钮</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</body>
<script type="text/javascript">
$(document).ready(function(){
var table = $('#site-table').dataTable({ "bFilter":true, "bSort":true,
//"bServerSide" : true,
//"sAjaxSource":"./userInfo",
"language": {
"url": "${basePath}/fonts/Chinese.json"
}});
});
</script>
</html>

问题现象是Modal对话框能够显示出来,但是,在它之下的页面的内容出现了移动,也就是说模态对话框对下面的页面的显示样式产生干扰,而且这个干扰貌似不仅位置移动,还有鼠标点击事件也被干扰了,有些按钮点的动,有的点不动。

看看下面两个图,图1是没有点击“切换”按钮的时候主页面上的按钮“创建专题”的位置,图2是点击切换按钮后,弹出模态框时,“创建专题”按钮的位置被莫名移动到下面的位置了。图3是我期望的样子,模态框弹出后,“创建专题”按钮依然不受影响,还在图1中显示的位置。

图3中显示的效果,其实,是将Dialog拖拽过了的,这个也是BootstrapDialog插件的优势。

回头来说,显示正常后,分析得知,是因为modal对话框中加载的内容,就是那个load函数对应的返回值,一个html页面中包含了下面的内容:

 <script src="${basePath}/js/jquery-1.11.1.min.js"></script>
<script src="${basePath}/js/bootstrap.min.js"></script>
<script src="${basePath}/js/jquery.dataTables.min.js"></script>
<link href="${basePath}/css/bootstrap.min.css" rel="stylesheet">
<link href="${basePath}/css/jquery.dataTables.min.css" rel="stylesheet">
<link href="${basePath}/css/common.css" rel="stylesheet">

但是,这些内容,在模态框的下面的页面中,其实也包含了。应该是这两个部分有什么联系,主要可能是因为BootstrapDialog对这个的隔离不太令人满意吧,于是,将要在Dialog中加载的内容,也就是message对应的内容中去掉上面的这些js和css文件,留下存的一点html内容就可以正常显示了。

这其中的具体原因,不是很清楚了。。。

bootstrapDialog插件集成datatables插件遇到的异常的更多相关文章

  1. mydate97时间插件集成jquery插件

    1.初始化JS: //把mydate97时间插件集成jquery插件 (function ($) { $.fn.mydatePicker = function (options) { return t ...

  2. [jQuery]jQuery DataTables插件自定义Ajax分页实现

    前言 昨天在博客园的博问上帮一位园友解决了一个问题,我觉得有必要记录一下,万一有人也遇上了呢. 问题描述 园友是做前端的,产品经理要求他使用jQuery DataTables插件显示一个列表,要实现分 ...

  3. 插件笔记——dataTables使用说明

    jquery DataTables中文使用说明 出处:http://blog.vunso.com/201405/jquery-datatables%E4%B8%AD%E6%96%87%E4%BD%BF ...

  4. dataTables 插件学习整理

    在项目中使用了dataTables 插件,学习整理一下. dataTables 的官方中文网站 http://www.datatables.club 引入文件: 所有的都要引入 jq文件 1. dat ...

  5. Datatables插件1.10.15版本服务器处理模式ajax获取分页数据实例解析

    一.问题描述 前端需要使用表格来展示数据,找了一些插件,最后确定使用dataTables组件来做. 后端的分页接口已经写好了,不能修改.接口需要传入页码(pageNumber)和页面显示数据条数(pa ...

  6. Maven集成Tomcat插件

    目录 类似插件及版本区别: 本地运行,启动嵌入式tomcat: 错误一: 错误二: Idea运行调试: vscode运行调试: 远程部署: 项目中的pom.xml配置: Tomcat中的tomcat- ...

  7. Jenkins中集成jmeter-maven插件

    转自:http://my.oschina.net/u/1377774/blog/168969 目录[-] 第一步.先在maven工程中单独使用jmeter-maven插件 0.环境 1.在POM.xm ...

  8. datatables插件适用示例

    本文共四部分:官网 | 基本使用|遇到的问题|属性表 一:官方网站:[http://www.datatables.NET/] 二:基本使用:[http://www.guoxk.com/node/jQu ...

  9. solr服务中集成IKAnalyzer中文分词器、集成dataimportHandler插件

    昨天已经在Tomcat容器中成功的部署了solr全文检索引擎系统的服务:今天来分享一下solr服务在海量数据的网站中是如何实现数据的检索. 在solr服务中集成IKAnalyzer中文分词器的步骤: ...

随机推荐

  1. Apache 中 .htaccess 文件设置技巧16则

    .htaccess 文件 (Hypertext Access file) 是Apache Web服务器的一个非常强大的配置文件,对于这个文件,Apache有一堆参数可以让你配置出几乎随心所欲的功能.. ...

  2. matlab自带princomp(PCA降维方式)

    matlab 中自带的函数就不必怀疑. princomp:principal componet analysis (PCA). [COEFF,SCORE,latent,tsquare]=princom ...

  3. (实用篇)PHP实现队列及队列原理

    队列是一种线性表,按照先进先出的原则进行的: PHP实现队列:第一个元素作为队头,最后一个元素作为队尾 <?php /** * 队列就是这么简单 * * @link */ $array = ar ...

  4. Web应用开发工具及语言需要具备的功能探索

    1 前言 最近一个多月在做Web项目,用到的技术有(也不算泄漏公司机密吧): 后台:Struts 2(with JSP/FreeMarker).Spring.Hibernate.MySQL.Web S ...

  5. 让Windows Server 2008 + IIS 7+ ASP.NET 支持10万并发请求(转载)

    转自:http://www.cnblogs.com/dudu/archive/2009/11/10/1600062.html 今天下午17点左右,博客园博客站点出现这样的错误信息: Error Sum ...

  6. UVa 1593代码对齐

    原题链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  7. JavaWeb学习记录(二十五)——权限管理总结

    一.面向对象思想简化数据库操作 public List<Role> getObjectsByIds(List<AdminRole> adminRoles) {        L ...

  8. QT GUI @创建新的工程

    开发环境: Qt 4.5 Qt Creator 1.3.0 新工程创建步骤: 1. 单击运行Qt Creator,进入欢迎页面.选择"File" -> "New F ...

  9. 黑马程序员——JAVA基础之数组

    ------- android培训.java培训.期待与您交流! ---------- 数组: 数组的定义: 数组是相同类型数据的集合, 描述的是相同类型的若干个数据按照一定的先后顺序排列组合而成,其 ...

  10. cluster,network

    How cluster works https://technet.microsoft.com/en-us/library/cc738051(v=ws.10).aspx http://blogs.te ...