2013-03-26 62 views
3

我在我的web应用程序中有一堆模态窗口。不幸的是,因为所有的对话框都有相同的大小,所以最高的一个覆盖其他的。自定义打开事件会很好,该事件会检查是否打开了其他对话框,选择最上面的一个,并选择一个(x,y)位置,为最上面的对话框的位置添加一些偏移量。有任何想法吗?jqueryui - 如何获得最顶级对话框的位置?

回答

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')     
       } 
      }); 
     } 
    } 
}); 

DEMO: http://jsfiddle.net/dirtyd77/8dnh6/1/

希望这有助于让我知道,如果你有任何问题!

+0

对上述答案的评论相同:我应该使用.position()(http://api.jqueryui.com/position/)的insess of css吗? – mnowotka 2013-03-26 16:40:05

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; 
     }); 
    }    
} 
+0

我应该使用.position()(http://api.jqueryui.com/position/)insess of css? – mnowotka 2013-03-26 16:39:47

+0

当然,你可以使用职位。我只是将它作为一个简单的方法来堆叠页面上的所有对话框。如果您想将对话框定位到另一个元素,位置将是一个不错的选择。 – clav 2013-03-26 16:43:49