开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1685|回复: 1
收起左侧

[JS相关教程] js模拟confirm功能

[复制链接]

结帖率:61% (35/57)
发表于 2013-1-22 12:25:49 | 显示全部楼层 |阅读模式   海南省海口市
confirm和alert对话框,厌恶了,今天要彻底地改变一下这两个对话框,且功能照旧。    这里是使用js来实现这个效果
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>js模拟confirm和alert功能</title>
    <script>
    /*
    ************************************
    功能:js模拟confirm、alert效果,改变
    它们原始那些灰色的样子
    来源:网络
    整理:www.aspprogram.cn
    ************************************
    */
    function clk_yes()
    {
    alert("这是confirm效果");
    }
    function clk_no()
    {
    alert("这不是confirm效果");
    }
    var alternateFrame=null;//生成的iframe
    var alternateWin=null;
    window.alert=showAlert;
    window.confirm=showConfirm;
    var IsIE=document.all;
    function alternateWindow(){
    this.win=null;//生成对话框的窗口对象
    this.pBody=null;//生成的body容器对象
    this.pBg=null;
    this.type="alert";//默认的种类是alert
    this.FocusWhere="OK";//焦点在哪个按钮上
    }
    function showAlert(info){
    alternateWin=new alternateWindow();
    var pBody = alternateWin.init();
    alternateWin.initAlertBody(pBody,info);
    alternateWin.type="alert";
    }
    function showConfirm(info,ok_func,notok_func,ok_str,not_okstr){
    alternateWin=new alternateWindow();
    var pBody = alternateWin.init();
    alternateWin.initConfirmBody(pBody,info,ok_func,notok_func,ok_str,not_okstr);
    alternateWin.type="confirm";
    }
    alternateWindow.prototype.init=function() {
    if(alternateFrame==null){
    /*alternateFrame=document.createElement("<iframe allowTransparency='true' id='popframe' "
    +"frameborder=0 marginheight=0 src='about:blank' marginwidth=0 hspace=0 vspace=0 scrolling=no></iframe>")*/
    //上面的ff不能兼容
    alternateFrame=document.createElement("iframe");
    //alternateFrame.allowTransparency='true';//这个没有什么用啊……
    alternateFrame.id='popframe';
    alternateFrame.frameborder=0;
    alternateFrame.marginheight=0;
    alternateFrame.vspace=0;
    alternateFrame.hspace=0;
    alternateFrame.scrolling="no";
    alternateFrame.src='about:blank';
    alternateFrame.style.position="absolute";
    document.body.appendChild(alternateFrame);
    }else{
    alternateFrame.style.visibility="visible";
    }
    //ff设置位置时要把单位加上
    alternateFrame.style.width=screen.availWidth+"px";
    alternateFrame.style.height=screen.availHeight+"px";
    alternateFrame.style.left=document.body.scrollLeft+"px";
    alternateFrame.style.top=document.body.scrollTop+"px";
    //alternateFrame.name=alternateFrame.uniqueID;//ff下iframe不支持uniqueID属性
    alternateFrame.name="popframe";
    //this.win=window.frames[alternateFrame.name];//=========
    this.win=IsIE?window.frames[alternateFrame.name]:document.getElementById("popframe")。contentWindow;
    this.win.document.write("<body leftmargin=0 topmargin=0 oncontextmenu='self.event.returnValue=false'><div id=popbg></div><div id=popbody></div><div></div></body>");
    this.win.document.body.style.backgroundColor="transparent";
    document.body.style.overflow="hidden";
    //=============下面两句
    this.pBody=IsIE?this.win.document.body.children[1]:this.win.document.getElementById("popbody");
    this.pBg=IsIE?this.win.document.body.children[0]:this.win.document.getElementById("popbg");
    this.hideAllSelect();
    this.initBg();
    return this.pBody;
    }
    /**
    * 作用:初始化背景层
    */
    //=============ff的滤镜播放效果的支持知道怎么搞
    alternateWindow.prototype.initBg=function(){
    with(this.pBg.style){
    position="absolute";
    left="0";
    top="0";
    width="100%";
    height="100%";
    visibility="hidden";
    backgroundColor="#000000";
    if(IsIE)
    filter="blendTrans(duration=1) alpha(opacity=30)";//==========
    else//ff下的blendTrans滤镜好象不支持,反正是不知道了
    opacity="0.3";//透明度这样设置,是ff时
    }
    if(IsIE) this.pBg.filters.blendTrans.apply();
    this.pBg.style.visibility="visible";
    if(IsIE) this.pBg.filters.blendTrans.play();
    }
    /**
    * 作用:初始化显示层
    */
    alternateWindow.prototype.initAlertBody=function(obj,info){
    with(obj.style){
    position="absolute";
    width="400";
    height="150";
    backgroundColor="#ffffff";
    }
    obj.style.left=window.document.body.clientWidth/2-200;
    obj.style.top=window.document.body.clientHeight/10;
    var str;
    str ="<table border=0 cellpadding=0 cellspacing=1 bgcolor=#00ff00 width=100% height=100%><tr height=30>";
    str+="<td align=left style='color:#e1dfdf;font-size:14px;font-weight:bold' bgcolor=#119035>【新闻详细】<span id=newstitle></span></td></tr>";
    str+="<tr><td align=center bgcolor=#81FB8D style='font-size:12px;color:#454545;vertical-align: top;padding-top:5px;'>";
    str+=info+"</td></tr><tr height=40 bgcolor=#81FB8D><td align=center>" +
    "<input type='button' value='关 闭' id='AlertOK'" +//这里id要注意唯一
    " onkeydown='parent.alternateWin.onKeyDown(event,this)'"+
    " onclick='parent.alternateWin.closeWin()' style='border:solid 1px #797979;background:#f8f8f8;width:80px; padding:3px;'>" +
    "</td></tr></table>";
    obj.innerHTML=str;
    //这句话有问题,ff不支持all
    if(IsIE)this.win.document.body.all.AlertOK.focus();else this.win.document.getElementById("AlertOK");
    this.FocusWhere="OK";
    }
    alternateWindow.prototype.onKeyDown=function(event,obj){
    switch(event.keyCode){
    case 9://tab键
    //这里事件对象属性和方法使用没加与区别
    if(IsIE) event.keyCode=-1;else event.preventDefault();
    if(this.type=="confirm"){
    if(this.FocusWhere=="OK"){
    if(IsIE)
    this.win.document.body.all.ConfirmNO.focus();
    else
    this.win.document.getElementById("ConfirmNo")。focus();
    this.FocusWhere="NO";
    }else{
    if(IsIE)this.win.document.body.all.ConfirmOK.focus();else this.win.document.getElementById("ConfirmOK")。focus();
    this.FocusWhere="OK";
    }
    }
    break;
    case 13:obj.click();break;
    case 27:this.closeWin();break;
    }
    }
    /**
    * 作用:初始化显示层 conFirm提示层
    */
    alternateWindow.prototype.initConfirmBody=function(obj,info,ok_func,notok_func,ok_str,notok_str){
    with(obj.style){
    position="absolute";
    width="400";
    height="150";
    backgroundColor="#ffffff";
    }
    if(ok_str==null){
    ok_str="确定";
    }
    if(notok_str==null){
    notok_str="取消"
    }
    obj.style.left=window.document.body.clientWidth/2-200;
    obj.style.top=window.document.body.clientHeight/3;
    var str;
    str="<table border=0 cellpadding=0 cellspacing=1 bgcolor=#81FB8D width=100% height=100%><tr height=30>";
    str+="<td align=left style='color:#000000;font-size:14px;font-weight:bold' bgcolor=#119035>[询问]</td></tr>";
    str+="<tr><td align=center bgcolor=#81FB8D style='font-size:12px;color:#000000;vertical-align: middle;'>";
    str+=info+"</td></tr><tr height=30 bgcolor=#81FB8D><td align=center>" +
    "<input type='button' id='ConfirmOK'" +//这里id要注意唯一
    " onkeydown='parent.alternateWin.onKeyDown(event,this)'"+
    " onclick='parent.alternateWin.closeWin();parent."+ok_func+"();' " +
    " value='"+ok_str+"' style='border:solid 1px #666666;background:#81FB8D'>"+
    "&nbsp;&nbsp;&nbsp;<input type='button' value='"+notok_str+"' id='ConfirmNO'"+//这里id要注意唯一
    " onkeydown='parent.alternateWin.onKeyDown(event,this)'"+
    " onclick='parent.alternateWin.closeWin();" +
    " parent."+notok_func+"();' style='border:solid 1px #666666;background:#81FB8D'></td></tr></table>";
    obj.innerHTML=str;
    if(IsIE)this.win.document.body.all.ConfirmOK.focus();else this.win.document.getElementById("ConfirmOK")。focus();
    }
    /**
    * 作用:关闭一切
    */
    alternateWindow.prototype.closeWin=function(){
    alternateFrame.style.visibility="hidden";
    this.showAllSelect();
    document.body.style.overflow="auto";
    }
    /**
    * 作用:隐藏所有的select
    */
    alternateWindow.prototype.hideAllSelect=function(){
    var obj;
    obj=document.getElementsByTagName("SELECT");
    var i;
    for(i=0;i<obj.length;i++)
    obj[i].style.visibility="hidden";
    }
    /**
    * 显示所有的select
    */
    alternateWindow.prototype.showAllSelect=function(){
    var obj;
    obj=document.getElementsByTagName("SELECT");
    var i;
    for(i=0;i<obj.length;i++)
    obj[i].style.visibility="visible";
    }
    </script>
    </head>
    <body>
    <h1>点击下面两个按纽进行测试</h1><br />
    <input name="" type="submit" value="confirm效果" />
    <input type="button" value="alert效果">
    </html>
结帖率:65% (13/20)

签到天数: 11 天

发表于 2013-1-22 13:27:06 | 显示全部楼层   山东省烟台市
哇~~大虾多谢分享虽然完全看不懂~~但是目测很高端~~(标题都没看懂)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表