jqueryui - 如何获得最顶层对话框的位置?

时间:2013-03-26 16:22:15

标签: javascript jquery jquery-ui modal-dialog jquery-ui-dialog

我的网络应用程序中有一堆模态窗口。不幸的是,因为所有对话框都具有相同的大小,顶部的对话框覆盖其他对拥有自定义打开事件会很好,它会检查是否打开了其他任何对话框,选择最顶层的一个和ajust(x,y)位置,在最顶层对话框的位置添加一些偏移量。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

你可以编写一个函数来安排页面上的所有jQuery UI对话框,并在open函数中调用它,就像这样。

function arrangeDialogs() {
    var $dialogs = $('div.ui-dialog:visible');

    if($dialogs.length) {
        var $first = $($dialogs[0]);
        var top = +$first.css('top').replace(/[^-\d\.]/g, '');
        var left = +$first.css('left').replace(/[^-\d\.]/g, '');                    

        $('div.ui-dialog').each(function() {
            $(this).css({top: top + 'px', left: left + 'px'});
            top += 5;
            left += 5;
        });
    }               
}

答案 1 :(得分:0)

使用open event。在我的示例中,它查找其他对话框,如果它们存在,则将其中一个堆叠在另一个上面。

$('.dialog').dialog({
    open: function( event, ui ) {
        var dialogs = $('.ui-dialog:visible');
        if(dialogs.length > 1){
            dialogs.each(function(i, e){
                if(i===0){
                   $(e).css('top', '0px');
                }else{
                    var prevDialog = $(e).prevAll('.ui-dialog:visible');
                     $(e).css('top', parseInt(prevDialog.css('top')) + parseInt(prevDialog.outerHeight()) + 'px')                  
                }
            });
        }
    }
});

样本: http://jsfiddle.net/dirtyd77/8dnh6/1/

希望这有帮助,如果您有任何问题,请告诉我们!