百度Popup.js弹出框进化版 拖拽小框架发布 兼容IE6/7/8,Firefox,Chrome


Posted in Javascript onApril 13, 2010

三水点靠木之前发布过这样的代码,其实问题不大,但这里的版本主要是增加一些功能,回调执行服务器端的方法,对于asp.net开发或ajax开发都是非常有价值的改进。
先看下效果图:
百度Popup.js弹出框进化版 拖拽小框架发布 兼容IE6/7/8,Firefox,Chrome

原有百度的Popup.js在有

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

声明的网页下存在兼容性问题,即在IE6,7,8下,遮罩层是可以全屏,但在Firefox和Chrome下无法全屏遮罩。

造成遮罩层在FF和Chrome下无法全屏的问题在267行:


var C = '<div id="dialogBoxBG" style="position:absolute;top:0px;left:0px;width:100%;height:100%;z-index:' + A + ";" + H + "background-color:" + this.color.cColor + ';display:none;"></div>';

遮罩层dialogBoxBG 的style只是单纯的设置为height:100%,所以在有<!DOCTYPE...>声明下的页面无法兼容FF和Chrome。
然而目前网上有一个“luocheng”的“完美版”popup.js,下载下来试用了下,结果并没有完全兼容FF和Chrome,还是存在遮罩层无法全屏的bug,读了一下源代码,找到了错误所在:luocheng的版本中增加了一个getValue方法,switch语句中的case "clientHeight":竟然有两个!删掉一个以后继续测试,还是无法兼容FF和Chrome,继续读代码排错,增加的setBackgroundSize方法中G('dialogBoxBG').style.height = getValueHeight;只是复制给遮罩层dialogBoxBG的height=整数值,这个是不遵循web标准的,所以在FF和Chrome下存在bug。
setBackgroundSize: function() { 
var getValueWidth; 
var getMaxValueWidth = [getValue("clientWidth"), getValue("scrollWidth")]; 
getValueWidth = eval("Math.max(" + getMaxValueWidth.toString() + ")"); 
G('dialogBoxBG').style.width = getValueWidth; 
var getValueHeight; 
var getMaxValueHeight = [getValue("clientHeight"), getValue("scrollHeight")]; 
getValueHeight = eval("Math.max(" + getMaxValueHeight.toString() + ")"); 
G('dialogBoxBG').style.height = getValueHeight; },

解决方法很简单:G('dialogBoxBG').style.height = getValueHeight;修改成G('dialogBoxBG').style.height = getValueHeight + "px";即可。
所以大家以后在开发过程中,注意对于宽度与高度最好加上'px';这样的单位。

令附上获取页面高度在不同浏览器之间的差异参考资料:

clientHeight:在IE和FF下,该属性没什么差别,都是指浏览器的可视区域,即除去浏览器的那些工具栏状态栏剩下的页面展示空间的高度;

scrollHeight:在IE下,scrollHeight 是页面实际内容的高度,可以小于clientHeight;在FF下,scrollHeight 是网页内容高度,不过最小值是clientHeight。
/*******************************************************/
拓展方法:
1.弹出确认框回调执行服务器端方法

function ShowConfirm(title, content, target) //显示确认对话框 
{ 
var pop = new Popup({ 
contentType: 3, 
isReloadOnClose: false, 
width: 350, 
height: 110 
}); 
pop.setContent("title", title); 
pop.setContent("confirmCon", content); 
pop.setContent("callBack", ShowCallBackServer); //回调函数 
pop.setContent("parameter", { 
id: "divCall", 
str: target, 
obj: pop 
}); 
pop.build(); 
pop.show(); 
popp = pop; 
return false; 
} 
//执行服务器端方法,即进行__doPostBack('','')操作 
function ShowCallBackServer(para) { 
var str = para["str"]; 
if ("" != str && null != str) { 
str = GetEachBtnName(str); 
if ("" != str && null != str) { 
//alert(str); 
__doPostBack(str, ''); 
} 
} 
ClosePop(); 
} 
//遍历页面中的Button名称 
function GetEachBtnName(obj) { 
return obj.name == '' || obj.name == null ? obj.id : obj.name; 
}

使用方法:

在一个有OnClick="btnTest_Click" 的Button控件上注册OnClientClick为return ShowConfirm(' ','是否确定删除?',this)。
完整代码:

<asp:Button ID="btnDel" runat="server" Text="删除" OnClick="btnDel_Click" OnClientClick="return ShowConfirm(' ','是否确定删除?',this)" />

2.在iframe中使用popup.js
我们在一个页面中内嵌了一个iframe,想让iframe中弹出的对话框或者确认框在父页面中弹出来,实现遮罩层全屏而不是只是在iframe页面中全屏,然后确认后执行回调操作iframe,可以是执行iframe中的服务器端方法。
function ShowConfirmIFrame(title, content, target) //显示确认对话框 
{ 
var pop = new Popup({ 
contentType: 3, 
isReloadOnClose: false, 
width: 350, 
height: 110 
}); 
pop.setContent("title", title); 
pop.setContent("confirmCon", content); 
pop.setContent("callBack", ShowIFrame); //回调函数 
pop.setContent("parameter", { 
id: "divCall", 
str: target, 
obj: pop 
}); 
temp = target; 
pop.build(); 
pop.show(); 
popp = pop; 
return false; 
} 
var temp; 
function ShowIFrame() { 
parent.frames["content"].window.ShowCallBackServerIFrame(temp); 
// parent.window.iframe.ShowCallBackServer(); 
} 
function ShowCallBackServerIFrame(para) { 
var str = para; 
if ("" != str && null != str) { 
str = GetEachBtnName(str); 
if ("" != str && null != str) { 
__doPostBack(str, ''); 
} 
} 
closeWin(); 
}

使用方法:
iframe中定义js方法:
//删除 
function subDel(obj) 
{ 
return parent.parentDel(obj); 
}

Button按钮控件注册OnClientClick事件:
<asp:Button ID="btnDel" runat="server" OnClick="btnDel_Click" ToolTip="删除" CssClass="deleteBtn" OnClientClick="return subDel(this);return false;" />

父页面定义js方法:
function parentDel(obj) 
{ 
return ShowConfirmIFrame('删除','是否确定删除?',obj); 
}

popup.js进化版与普通修正版下载  原版也修正了上面所说的并没有完全兼容FF和Chrome的问题。
Javascript 相关文章推荐
Javascript 面向对象 继承
May 13 Javascript
时间戳转换为时间 年月日时间的JS函数
Aug 19 Javascript
javascript闭包入门示例
Apr 30 Javascript
js老生常谈之this,constructor ,prototype全面解析
Apr 05 Javascript
jQuery事件委托之Safari
Jul 05 Javascript
ionic隐藏tabs的方法
Aug 29 Javascript
JQuery手速测试小游戏实现思路详解
Sep 20 Javascript
jQuery展示表格点击变色、全选、删除
Jan 05 Javascript
Vue.js路由vue-router使用方法详解
Mar 20 Javascript
自带气泡提示的vue校验插件(vue-verify-pop)
Apr 07 Javascript
react-native ListView下拉刷新上拉加载实现代码
Aug 03 Javascript
浅谈vue.use()方法从源码到使用
May 12 Javascript
JavaScript在IE和Firefox(火狐)的不兼容问题解决方法小结
Apr 13 #Javascript
JavaScript 数组运用实现代码
Apr 13 #Javascript
关于Jqzoom的使用心得 jquery放大镜效果插件
Apr 12 #Javascript
Javascript 判断Flash是否加载完成的代码
Apr 12 #Javascript
使用dynatrace-ajax跟踪JavaScript的性能
Apr 12 #Javascript
javascript URL编码和解码使用说明
Apr 12 #Javascript
!DOCTYPE声明对JavaScript的影响分析
Apr 12 #Javascript
You might like
PHP新手上路(六)
2006/10/09 PHP
php遍历文件夹所有文件子文件夹函数代码
2013/11/27 PHP
php 实现银联商务H5支付的示例代码
2019/10/12 PHP
laravel框架与其他框架的详细对比
2019/10/23 PHP
javascript 面向对象 function类
2010/05/13 Javascript
基于jquery的cookie的用法
2011/01/10 Javascript
面向对象的Javascript之二(接口实现介绍)
2012/01/27 Javascript
Jquery 表单验证类介绍与实例
2013/06/09 Javascript
JavaScript禁止复制与粘贴的实现代码
2016/05/16 Javascript
js中的eval()函数把含有转义字符的字符串转换成Object对象的方法
2016/12/02 Javascript
Bootstrap整体框架之CSS12栅格系统
2016/12/15 Javascript
js 去掉字符串前后空格实现代码集合
2017/03/25 Javascript
js使用i18n实现页面国际化的方法
2017/05/09 Javascript
在Bootstrap开发框架中使用dataTable直接录入表格行数据的方法
2018/10/25 Javascript
vue-cli3 项目优化之通过 node 自动生成组件模板 generate View、Component
2019/04/30 Javascript
Vue实现固定定位图标滑动隐藏效果
2019/05/30 Javascript
vue 父组件通过$refs获取子组件的值和方法详解
2019/11/07 Javascript
vuex实现购物车的增加减少移除
2020/06/28 Javascript
Vue Render函数创建DOM节点代码实例
2020/07/08 Javascript
把大数据数字口语化(python与js)两种实现
2013/02/21 Python
对变量赋值的理解--Pyton中让两个值互换的实现方法
2017/11/29 Python
教你使用python画一朵花送女朋友
2018/03/29 Python
python中redis查看剩余过期时间及用正则通配符批量删除key的方法
2018/07/30 Python
python随机数分布random测试
2018/08/27 Python
关于pytorch多GPU训练实例与性能对比分析
2019/08/19 Python
给大家整理了19个pythonic的编程习惯(小结)
2019/09/25 Python
CSS3实现全景图特效示例代码
2018/03/26 HTML / CSS
柯基袜:Corgi Socks
2017/01/26 全球购物
餐饮加盟计划书
2014/01/10 职场文书
2014年商场超市庆元旦活动方案
2014/02/14 职场文书
售后服务承诺书范文
2014/03/26 职场文书
岳庙导游词
2015/02/04 职场文书
离婚起诉书范本
2015/05/18 职场文书
2015年房产销售工作总结范文
2015/05/22 职场文书
防震减灾主题班会
2015/08/14 职场文书
JavaScript实现班级抽签小程序
2021/05/19 Javascript