窗口打开作为模态弹出框?

11

我希望以模态弹出窗口的形式打开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。但是该窗口不是模态窗口。
如何解决这个问题?我能在子弹窗口中编写什么来使其始终置顶吗?
4个回答

40

弹出窗口是父窗口的子级,但不是父文档的子级。它是独立的浏览器窗口,不被父级包含。

使用绝对定位的 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>

5
真不敢相信这个人居然没给你点个赞,你做了这么多的工作! - John MacIntyre

9

您可以尝试使用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>


出色的样式和过渡 - warkentien2

3

1

我同意前面两个答案。基本上,您想使用被称为“lightbox”的东西 - http://en.wikipedia.org/wiki/Lightbox_(JavaScript)

它本质上是在当前窗口/标签页的DOM中创建的一个div。除了包含对话框的div之外,透明覆盖层还会阻止用户参与所有基础元素。这可以有效地创建模态对话框(即用户必须在继续之前做出某种决定)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接