使用模态窗口,vReturnValue = window.showModalDialog(sURL [, vArguments] [,sFeatures])

解决方案 »

  1.   

    FF是不支持showModalDialog的楼主想如何阻塞?可否贴个样例?
      

  2.   

    我的阻塞是譬如我写alert("1");alert("2");alert("3");
    那么将会在弹出1,之后要求我点确认,然后再运行到2,然后确认,再弹出3,
    而不带阻塞的会显示3,2,1  一起显示出来,就是执行完alert("1");后没确定前也会继续执行
      

  3.   

    好象是不能阻塞的,刚看了个帖子,有方便回调的方法,还不错
    http://bbs.51js.com/redirect.php?tid=72325&goto=lastpost
      

  4.   

    我们公司现在用的就是ext的,然后在里面写回调,但是我们公司有100多个模块,页面更是不计其数,接下来一个多月就是我们的工作重点。郁闷!如果可以带阻塞,那么就不用改写什么代码,直接重写alert就好,研究了下,我也分享下我的东西
      

  5.   

    dailog.htm
    <html>
     <head>
       <script>
         var param = window.dialogArguments; //传过来的模式对话框窗口参数
         document.title = param.title; //窗口标题,必须在窗口创建前实现s
         
       /********将父窗口的js加载进来********/
         var scripts = param.parent.document.scripts;
         var _head = document.getElementsByTagName("head")[0];
         for(var n = 0; n < scripts.length; n++) {
           if(scripts[n].src) {
             var _script = newEl("script");
             _script.src = scripts[n].src;
             bind(_head, _script);
           }else{//加载直接在html文档中写的script
             var _script = newEl("script");
             _script.text = scripts[n].text;
              bind(_head, _script);
           }
         }
         
         /*******根据ID获得父窗口的元素*********/
         function $f(el) {
           return param.parent.document.getElementById(el);
         }
        
        /***********创建一个HTML元素*******/
         function newEl(tagName) {
           return document.createElement(tagName);
         }
         /***********追加元素***************/
         function bind(ower, child) {
           ower.appendChild(child);
         }
         /*******在浏览器完成对象的装载后立即触发*********/
         window.onload = function() {
           var winDiv;
           if(typeof(param._div) == "string") {
             winDiv = param.parent.document.getElementById(param._div); //父窗口window对象,因为param._div对象在父窗口
           }else{//直接传对象过来
             winDiv = param._div;
           }
           $("mainDiv").innerHTML = winDiv.innerHTML; //将DIV内容在弹出窗口中渲染
        }
       </script>
     </head>
     <body>
     <center>
      <div id="mainDiv" style="margin-top:20px;width:90%"></div>
     </center>
     </body>
    </html>
    test.html
    <html>
     <head>
       <title>测试页面</title>
       <style>
         .list {
           border-top:1 solid #8A2BE2;
           border-left:1 solid #8A2BE2;
           border-right:1 solid #8A2BE2;
         }
         .list td {
           border-bottom: 1 solid #8A2BE2;
         }
       </style>
       <script>
          function $(el) {
            return document.getElementById(el);
          }
          function showWin(param) {
           alert("test 前");
            window.showModalDialog("dailog.htm", param, "dialogWidth:" +param.width +"px;dialogHeight:"+param.height+"px;center:yes;help:no;scroll:no;status:no;resizable:no");
            alert("test 后");
          }
          
          function TB(tbid) {
            this.tb = typeof(tbid) == "string"? $(tbid): tbid;
            this.getValue = function(rowIndex, cellIndex){
              var trs = this.tb.rows[rowIndex];
              var _td = trs.cells[cellIndex];
              return _td.innerText;
            }
            this.setValue = function(rowIndex, cellIndex, value) {
              var _tr = this.tb.rows[rowIndex];
              var _td = _tr.cells[cellIndex];
              _td.innerText = value;
            }
            
            /********获取行索引********/
            this.findRowIndex = function(eventSrc) {
              var _tr = eventSrc; //eventSrc事件源,必须在TD里获事件源是TD或TR本身
              while(_tr.tagName != "TR") {
                _tr =  _tr.parentNode;
              }
              var trs = this.tb.rows;
              for(var i = 0; i < trs.length; i++){
                if(_tr == trs[i]) return i;
              }
            }
          }
               
          function edit() {
            var tb = new TB("data");
            rIndex = tb.findRowIndex(event.srcElement);
            $("updateRowIndex").value = rIndex;
            $("userName").value = tb.getValue(rIndex, 1); //获得姓名
            $("sex").value = tb.getValue(rIndex, 2); //获得性别
            $("age").value = tb.getValue(rIndex, 3); //获得年龄
             showWin({title:"修改用户信息", width:390, height:230, _div:"openWin",parent:window});
          }
          
          function saveAndUpdateView(){
            var updateRowIndex = $("updateRowIndex").value;
            var tb = new TB($f("data")); //$f()在dailog.html定义,获到的table是父窗口中的table
            tb.setValue(updateRowIndex, 1, $("userName").value);
            tb.setValue(updateRowIndex, 2, $("sex").value);
            tb.setValue(updateRowIndex, 3, $("age").value);
            close();
          }
       </script>
       
     </head>
     <body>
      <p style="margin-top:60px">
       <center>
         <table id="data" class="list" width="460px">
           <tr> 
             <td>编号</td>
             <td>用户名</td>
             <td>性别</td>
             <td>年龄</td>
             <td>操作</td>
           </tr>
           <tr> 
             <td>1</td>
             <td>李永胜</td>
             <td>男</td>
             <td>27</td>
             <td><span style="background:#FAEBD7;cursor:hand" onclick="edit();">&nbsp;修改&nbsp;</span></td>
           </tr>
            <tr> 
             <td>2</td>
             <td>林兄</td>
             <td>男</td>
             <td>27</td>
             <td><span style="background:#FAEBD7;cursor:hand" onclick="edit();">&nbsp;修改&nbsp;</span></td>
           </tr>
            <tr> 
             <td>3</td>
             <td>叶兄</td>
             <td>男</td>
             <td>23</td>
             <td><span style="background:#FAEBD7;cursor:hand" onclick="edit();">&nbsp;修改&nbsp;</span></td>
           </tr>
         </table>
       </center>
      </p>
      
      <!---弹出窗口显示的内容---->
      <div id="openWin" style="display:none;">
        <form>
          <fieldSet>
            <legend>修改用户</legend>
            <table>
              <tr>
                <td>用户名</td><td><input type="text" id="userName"/></td>
              </tr>
              <tr>
                <td>性别</td><td><input type="text" id="sex"/></td>
              </tr>
              <tr>
                <td>年龄</td><td><input type="text" id="age"/></td>
              </tr>
            </table>
          </fieldSet> 
          <input type="hidden" id="updateRowIndex"/>
        </form>
        <span style="background:#FAEBD7;cursor:hand" onclick="saveAndUpdateView();">&nbsp;修改&nbsp;</span>
      </div>
     </body>
    </html>
      

  6.   

      楼主用在项目中用ext,我对这东西刚接触,也想把它用在有商业目的的项目中。收费吗?好像是不是还要获得什么授权。
      

  7.   

    然后现在是可以阻塞了,但是弹出的网页还是有标题栏,那颜色样式等于没改
    然后又找到了一个解决方案,这个窗口是可以自定义的
    <HTML>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>Chromeless Window</title>
    <SCRIPT LANGUAGE="JScript">
    /*
    This following code are designed and writen by Windy_sk <[email protected]>
    You can use it freely, but u must held all the copyright items!
    2003-12-23 modified
    Special Thanks For andot
    */var CW_width = 400;
    var CW_height = 300;
    var CW_top = 100;
    var CW_left = 100;
    var CW_url = "/";
    var New_CW = window.createPopup();
    var CW_Body = New_CW.document.body;
    var content = "";
    var CSStext = "margin:1px;color:black; border:2px outset;border-style:expression(onmouseout=onmouseup=function(){this.style.borderStyle='outset'}, onmousedown=function(){if(event.button!=2)this.style.borderStyle='inset'});background-color:buttonface;width:16px;height:14px;font-size:12px;line-height:11px;cursor:Default;";function insert_content(){
    var temp = "";
    CW_Body.style.overflow   = "hidden";
    CW_Body.style.backgroundColor = "white";
    CW_Body.style.border   = "solid black 1px";
    temp += "<table width=100% height=100% cellpadding=0 cellspacing=0 border=0>";
    temp += "<tr style=';font-size:12px;background:#0099CC;height:20;cursor:default' ondblclick=\"Max.innerText=Max.innerText=='1'?'2':'1';parent.if_max=!parent.if_max;parent.show_CW();\" onmouseup='parent.drag_up(event)' onmousemove='parent.drag_move(event)' onmousedown='parent.drag_down(event)' onselectstart='return false' oncontextmenu='return false'>";
    temp += "<td style='color:#ffffff;padding-left:5px'>Chromeless Window For IE6 SP1</td>";
    temp += "<td style='color:#ffffff;padding-right:5px;' align=right>";
    temp += "<span id=Help   onclick=\"alert('Chromeless Window For IE6 SP1   -   Ver 1.0\\n\\nCode By Windy_sk\\n\\nSpecial Thanks For andot')\" style=\""+CSStext+"font-family:System;padding-right:2px;\">?</span>";
    temp += "<span id=Min    onclick='parent.New_CW.hide();parent.blur()' style=\""+CSStext+"font-family:Webdings;\" title='Minimum'>0</span>";
    temp += "<span id=Max    onclick=\"this.innerText=this.innerText=='1'?'2':'1';parent.if_max=!parent.if_max;parent.show_CW();\" style=\""+CSStext+"font-family:Webdings;\" title='Maximum'>1</span>";
    temp += "<span id=Close onclick='parent.opener=null;parent.close()' style=\""+CSStext+"font-family:System;padding-right:2px;\" title='Close'>x</span>";
    temp += "</td></tr><tr><td colspan=2>";
    temp += "<div>";
    temp += "这里是网页内容<br>这里是网页内容<br>...";
    temp += "</div>";
    temp += "</td></tr></table>";
    CW_Body.innerHTML = temp;
    }insert_content();var if_max = true;
    function show_CW(){
    window.moveTo(10000, 10000);
    if(if_max){
       New_CW.show(CW_top, CW_left, CW_width, CW_height);
       if(typeof(New_CW.document.all.include)!="undefined"){
        New_CW.document.all.include.style.width = CW_width;
        New_CW.document.all.Max.innerText = "1";
       }
      
    }else{
       New_CW.show(0, 0, screen.width, screen.height);
       New_CW.document.all.include.style.width = screen.width;
    }
    }window.onfocus   = show_CW;
    window.onresize = show_CW;// Move Window
    var drag_x,drag_y,draging=falsefunction drag_move(e){
    if (draging){
       New_CW.show(e.screenX-drag_x, e.screenY-drag_y, CW_width, CW_height);
       return false;
    }
    }function drag_down(e){
    if(e.button==2)return;
    if(New_CW.document.body.offsetWidth==screen.width && New_CW.document.body.offsetHeight==screen.height)return;
    drag_x=e.clientX;
    drag_y=e.clientY;
    draging=true;
    e.srcElement.setCapture();
    }function drag_up(e){
    draging=false;
    e.srcElement.releaseCapture();
    if(New_CW.document.body.offsetWidth==screen.width && New_CW.document.body.offsetHeight==screen.height) return;
    CW_top   = e.screenX-drag_x;
    CW_left = e.screenY-drag_y;
    }
    </SCRIPT>
    </HTML>
      

  8.   

    恩 alert prompt confirm都是进程同步的模拟进程同步 应该很难。。
      

  9.   

    大家还是别说兼容,就IE下能实现就不错了,要像alert那样的窗体功能,编个ActiveX的个性化窗体可能可以。