【问题标题】:Window.open as modal popup?Window.open 作为模式弹出窗口?
【发布时间】:2011-04-25 15:42:02
【问题描述】:

我想打开window.open 作为模式弹出窗口。

 var features = 'resizable= yes; status= no; scroll= no; help= no; center= yes;
 width=460;height=140;menubar=no;directories=no;location=no;modal=yes';
    window.open(href, 'name', features, false);

我可以使用Window.ShowModelDialog(),但在我的子窗口中我调用父javascript 方法。 ShowModelDialog() 不会发生这种情况。

 function CallParentScript(weburl) {
       alert(weburl);
       if (weburl != null) {
           var url = weburl;

            window.opener.SelectUserImageCallback(url);
            window.close();
            return false;
       }
   }

如果我使用window.open()。我可以调用父 javascript。但是窗口不是模态的。

如何解决这个问题?我可以在子弹出窗口中写一些东西到总是顶部吗?

【问题讨论】:

    标签: javascript asp.net css


    【解决方案1】:

    你可以尝试用html5和css3打开一个模态对话框,试试这个代码:

    .windowModal {
        position: fixed;
        font-family: Arial, Helvetica, sans-serif;
        top: 0;
        right: 0;
        bottom: 0;
        left: 0;
        background: rgba(0,0,0,0.8);
        z-index: 99999;
        opacity:0;
        -webkit-transition: opacity 400ms ease-in;
        -moz-transition: opacity 400ms ease-in;
        transition: opacity 400ms ease-in;
        pointer-events: none;
    }
    .windowModal:target {
        opacity:1;
        pointer-events: auto;
    }
    
    .windowModal > div {
        width: 400px;
        position: relative;
        margin: 10% auto;
        padding: 5px 20px 13px 20px;
        border-radius: 10px;
        background: #fff;
        background: -moz-linear-gradient(#fff, #999);
        background: -webkit-linear-gradient(#fff, #999);
        background: -o-linear-gradient(#fff, #999);
    }
    .close {
        background: #606061;
        color: #FFFFFF;
        line-height: 25px;
        position: absolute;
        right: -12px;
        text-align: center;
        top: -10px;
        width: 24px;
        text-decoration: none;
        font-weight: bold;
        -webkit-border-radius: 12px;
        -moz-border-radius: 12px;
        border-radius: 12px;
        -moz-box-shadow: 1px 1px 3px #000;
        -webkit-box-shadow: 1px 1px 3px #000;
        box-shadow: 1px 1px 3px #000;
    }
    
    .close:hover { background: #00d9ff; }
    <a href="#divModal">Open Modal Window</a>
    
    <div id="divModal" class="windowModal">
        <div>
            <a href="#close" title="Close" class="close">X</a>
            <h2>Modal Dialog</h2>
            <p>This example shows a modal window without using javascript only using html5 and css3, I try it it¡</p>
            <p>Using javascript, with new versions of html5 and css3 is not necessary can do whatever we want without using js libraries.</p>
        </div>
    </div>

    【讨论】:

    • 出色的样式和过渡
    【解决方案2】:

    弹出窗口是父窗口的子窗口,但不是父 DOCUMENT 的子窗口。它是自己独立的浏览器窗口,不包含在父级中。

    改用绝对定位的 DIV 和半透明叠加层。

    编辑 - 示例

    为此你需要 jQuery:

    <style>
    html, body {
        height:100%
    }
    
    
    #overlay { 
        position:absolute;
        z-index:10;
        width:100%;
        height:100%;
        top:0;
        left:0;
        background-color:#f00;
        filter:alpha(opacity=10);
        -moz-opacity:0.1;
        opacity:0.1;
        cursor:pointer;
    
    } 
    
    .dialog {
        position:absolute;
        border:2px solid #3366CC;
        width:250px;
        height:120px;
        background-color:#ffffff;
        z-index:12;
    }
    
    </style>
    <script type="text/javascript">
    $(document).ready(function() { init() })
    
    function init() {
        $('#overlay').click(function() { closeDialog(); })
    }
    
    function openDialog(element) {
        //this is the general dialog handler.
        //pass the element name and this will copy
        //the contents of the element to the dialog box
    
        $('#overlay').css('height', $(document.body).height() + 'px')
        $('#overlay').show()
        $('#dialog').html($(element).html())
        centerMe('#dialog')
        $('#dialog').show();
    }
    
    function closeDialog() {
        $('#overlay').hide();
        $('#dialog').hide().html('');
    }
    
    function centerMe(element) {
        //pass element name to be centered on screen
        var pWidth = $(window).width();
        var pTop = $(window).scrollTop()
        var eWidth = $(element).width()
        var height = $(element).height()
        $(element).css('top', '130px')
        //$(element).css('top',pTop+100+'px')
        $(element).css('left', parseInt((pWidth / 2) - (eWidth / 2)) + 'px')
    }
    
    
    </script>
    
    
    <a href="javascript:;//close me" onclick="openDialog($('#content'))">show dialog A</a>
    
    <a href="javascript:;//close me" onclick="openDialog($('#contentB'))">show dialog B</a>
    
    <div id="dialog" class="dialog" style="display:none"></div>
    <div id="overlay" style="display:none"></div>
    <div id="content" style="display:none">
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin nisl felis, placerat in sollicitudin quis, hendrerit vitae diam. Nunc ornare iaculis urna. 
    </div>
    
    <div id="contentB" style="display:none">
        Moooo mooo moo moo moo!!! 
    </div>
    

    【讨论】:

    • 不敢相信这个家伙至少没有给你所有的工作投赞成票!
    【解决方案3】:

    我同意前面的两个答案。基本上,您想使用所谓的“灯箱” - http://en.wikipedia.org/wiki/Lightbox_(JavaScript)

    它本质上是一个 div,而不是在当前窗口/选项卡的 DOM 中创建的。除了包含您的对话框的 div 之外,透明的覆盖层会阻止用户使用所有底层元素。这可以有效地创建一个模式对话框(即用户必须在继续之前做出某种决定)。

    【讨论】:

      【解决方案4】:

      该解决方案将打开一个新的浏览器窗口,没有地址栏等正常功能。

      要实现一个模态弹窗,我建议你看看jQuery和SimpleModal,真的很slick。

      (这里有一些使用 SimpleModal 的简单演示:http://www.ericmmartin.com/projects/simplemodal-demos/

      【讨论】:

        猜你喜欢
        • 2017-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多