как центрировать всплывающее модальное окно jqGrid? [дубликат]

Возможные Дубликаты:
jqGrid переместить удалить окно подтверждения

Я начал использовать jqGrid в течение нескольких дней, и все работает круто.пока все хорошо. Что меня ограничивает, так это то, что когда вы нажимаете кнопку редактирования в NavGrid без выбора строки он показывает центрированное модальное всплывающее окно, уведомляющее об отсутствии выбранной строки. Но когда вы нажимаете на add или edit(с выбранной строкой), он показывает модальный в левой части сетка.Не центрируется на всех.

Я хотел бы найти путь к центру.

Как это делается? или это нельзя сделать из коробки?

спасибо за чтение этого

4 ответов


Мне кажется, что самый простой способ сделать это-изменить позицию диалога внутри beforeShowForm событие:

var grid = $("#list");    
grid.jqGrid('navGrid','#pager',
            {add:false,del:false,search:false,refresh:false},
            { beforeShowForm: function(form) {
                  // "editmodlist"
                  var dlgDiv = $("#editmod" + grid[0].id);
                  var parentDiv = dlgDiv.parent(); // div#gbox_list
                  var dlgWidth = dlgDiv.width();
                  var parentWidth = parentDiv.width();
                  var dlgHeight = dlgDiv.height();
                  var parentHeight = parentDiv.height();
                  // TODO: change parentWidth and parentHeight in case of the grid
                  //       is larger as the browser window
                  dlgDiv[0].style.top = Math.round((parentHeight-dlgHeight)/2) + "px";
                  dlgDiv[0].style.left = Math.round((parentWidth-dlgWidth)/2) + "px";
              }
            });

вы можете увидеть пример здесь.


по какой-то причине код Олега, как указано, не полностью работал для меня (хотя я бы никогда не зашел так далеко без него).

два вопроса:
1.) Если вы просто вставите то, что есть, вы переместите свой модал редактирования, но не добавите модал. У меня есть только модальный add, так что это было запутанно какое-то время. Вы в основном просто двойной код (см. ниже).

2.) Написанный код добавлял усредненную верхнюю и левую относительно целая страница, а не Родительский div. Я уверен, что упускаю что-то очевидное (или, возможно, это то, о чем идет речь?), но это сработало для меня...

{ 
    beforeShowForm: function(form) {
        alert('beforeShowForm FOR EDIT MODAL ONLY');
        // cut and paste code below to use for edit modal too.
    }
},
// options for add new modal here:
{
    beforeShowForm: function(form)  {
        //alert('adding' + "#editmod" + grdNames[0].id);
        var dlgDiv = $("#editmod" + grdNames[0].id);
        var parentDiv = dlgDiv.parent(); // div#gbox_list
        var dlgWidth = dlgDiv.width();
        var parentWidth = parentDiv.width();
        var dlgHeight = dlgDiv.height();
        var parentHeight = parentDiv.height();

        // Grabbed jQuery for grabbing offsets from here:
        //https://stackoverflow.com/questions/3170902/select-text-and-then-calculate-its-distance-from-top-with-javascript
        var parentTop = parentDiv.offset().top;
        var parentLeft = parentDiv.offset().left;


        // HINT: change parentWidth and parentHeight in case of the grid
        //       is larger as the browser window
        dlgDiv[0].style.top =  Math.round(  parentTop  + (parentHeight-dlgHeight)/2  ) + "px";
        dlgDiv[0].style.left = Math.round(  parentLeft + (parentWidth-dlgWidth  )/2 )  + "px";

    }
}               

код ниже может использоваться для центра окна. Для этого используется пример кода Oleg.

Если высота формы изменяется, она не центрируется. Testcase для воспроизведения формы не центрированной проблемы.

воспроизведение:

  1. открыть страницу ниже в IE9
  2. открыть вид для первого ряда
  3. нажмите в окне просмотра кнопку следующая строка, чтобы открыть вторую строку.

Observerd:

Окно просмотра не центрировано, нижнее содержимое не видимый и недоступный.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    <link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/themes/redmond/jquery-ui.css" />
    <link rel="stylesheet" type="text/css" href="http://www.ok-soft-gmbh.com/jqGrid/jquery.jqGrid-3.7.2/src/css/ui.jqgrid.css" />
    <link rel="stylesheet" type="text/css" href="http://www.ok-soft-gmbh.com/jqGrid/jquery.jqGrid-3.7.2/src/css/jquery.searchFilter.css" />
    <link rel="stylesheet" type="text/css" href="http://www.ok-soft-gmbh.com/jqGrid/jquery.jqGrid-3.7.2/src/css/ui.multiselect.css" />
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/jquery-ui.js"></script>
    <script type="text/javascript" src="http://www.ok-soft-gmbh.com/jqGrid/jquery.jqGrid-3.7.2/src/ui.multiselect.js"></script>
    <script type="text/javascript" src="http://www.ok-soft-gmbh.com/jqGrid/jquery.jqGrid-3.7.2/src/i18n/grid.locale-en.js"></script>
    <script type="text/javascript" src="http://www.ok-soft-gmbh.com/jqGrid/jquery.jqGrid-3.7.2/src/grid.base.js"></script>
    <script type="text/javascript" src="http://www.ok-soft-gmbh.com/jqGrid/jquery.jqGrid-3.7.2/src/grid.common.js"></script>
    <script type="text/javascript" src="http://www.ok-soft-gmbh.com/jqGrid/jquery.jqGrid-3.7.2/src/grid.formedit.js"></script>
    <script type="text/javascript" src="http://www.ok-soft-gmbh.com/jqGrid/jquery.jqGrid-3.7.2/src/grid.inlinedit.js"></script>
    <script type="text/javascript" src="http://www.ok-soft-gmbh.com/jqGrid/jquery.jqGrid-3.7.2/src/grid.custom.js"></script>
    <script type="text/javascript" src="http://www.ok-soft-gmbh.com/jqGrid/jquery.jqGrid-3.7.2/src/jquery.fmatter.js"></script>
    <script type="text/javascript" src="http://www.ok-soft-gmbh.com/jqGrid/jquery.jqGrid-3.7.2/src/jquery.searchFilter.js"></script>
    <script type="text/javascript" src="http://www.ok-soft-gmbh.com/jqGrid/jquery.jqGrid-3.7.2/src/grid.jqueryui.js"></script>
    <script type="text/javascript">
        $(document).ready(function() {

        jQuery.extend(jQuery.jgrid.view, {
           recreateForm: true,
           closeOnEscape: true,

            width: 0.96*screen.width,

           beforeShowForm: function ($form) {
             $form.css({"max-height": 0.72*screen.height+"px"});
             $form.find("td.DataTD").each(function () {
               var $this = $(this), html = $this.html();  // &nbsp;<span>&nbsp;</span>
               if (html.substr(0, 6) === "&nbsp;") {
                 $(this).html(html.substr(6));
                 }
                $this.children("span").css({
                                overflow: "auto",
                                "text-align": "inherit", // overwrite 'text-align: "right"'
                                display: "inline-block"/*,
                                "max-height": "100px"*/
                            });
                        });

                        // "editmodlist" 
                  var dlgDiv = $("#viewmod" + $('#list')[0].id); 
                  var parentDiv = dlgDiv.parent(); // div#gbox_list 
                  //var dlgWidth = dlgDiv.width(); 
                  //var parentWidth = parentDiv.width(); 
                  var dlgHeight = dlgDiv.height(); 
                  var parentHeight = parentDiv.height(); 
                  // TODO: change parentWidth and parentHeight in case of the grid 
                  //       is larger as the browser window 
                  dlgDiv[0].style.top = Math.round((parentHeight-dlgHeight)/2) + "px"; 
                  // dlgDiv[0].style.left = Math.round((parentWidth-dlgWidth)/2) + "px"; 



                    }


         });

            var mydata = [
                {id:"1",invdate:"2007-10-02",name:"row1",note:"note2",amount:"300.00",tax:"20.00",total:"320.00"},
                {id:"2",invdate:"2007-10-02",name:"clicking\n me\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nincreases form height clicking me increases form height test2 sdfsdfsd dfksdfkj sdfjksdfjk sdsdl sdklfsdjklf dsflsdl sdlfsdfklj lsdlf sdlsdfklsdjlk sdfsdlfkjsd sflsdfkjsdfs sdfsjdfklsdklfj fsdjflsdfj",note:"note2",amount:"300.00",tax:"20.00",total:"320.00"}
            ];
            var grid = $("#list");
            grid.jqGrid({
                data: mydata,
                datatype: "local",
                colModel:[
                    {name:'id',index:'id', key: true, width:70, sorttype:"int"},
                    {name:'invdate',index:'invdate', width:90, sorttype:"date", editable: true},
                    {name:'name',index:'name', style:'width:"20px"', editable: true, edittype: 'textarea',
wrap: 'on',
editoptions: {                  wrap : "on",
                                style : "width:30px"
}
},
                    {name:'amount',index:'amount', width:80, align:"right",sorttype:"float", editable: true},
                    {name:'tax',index:'tax', width:80, align:"right",sorttype:"float", editable: true},
                    {name:'total',index:'total', width:80,align:"right",sorttype:"float", editable: true},
                    {name:'note',index:'note', width:150, sortable:false}
                ],
                pager:'#pager',
                rowNum: 10,
                rowList: [5, 10, 20, 50],
                sortname: 'id',
                sortorder: 'asc',
                viewrecords: true,
                height: "100%",
                caption: "Custom Navigation to Top Toolbar"
            });
            grid.jqGrid('navGrid','#pager',{add:false,del:false,search:false,refresh:false, edit: false, view: true});
        });
    </script>
</head>

<body style="overflow:hidden">

<table id="list"><tbody><tr><td/></tr></tbody></table>
<div id="pager"/>

</body>
</html>

или просто использовать

beforeShowForm: function(form) {$("#editmod" + gridId).addClass("centered"); }

где gridId-идентификатор вашей сетки, а затем в css что-то вроде этого:

div.centered {
    position: fixed;
    top: 50%;
    left: 50%;
    margin-top: -50px;
    margin-left: -100px;

}

ура Ярек!--3-->