jqGrid / ui-widget-overlay блокирует все кнопки и события вкладки на всей странице - PullRequest
8 голосов
/ 03 января 2012

Я использую Redmond Themeroller с моей jqGrid. Файл jquery-ui-1.8.16.custom.css имеет это наложение.

/* Overlays */
.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }

Я думаю, что на сетке нужно делать оверлей, чтобы делать стилизацию. Но похоже, что он покрывает всю мою страницу, и хотя в самой сетке все еще есть события мыши, на остальной части страницы (включая раздел пейджера / навигатора сетки) нет событий мыши, и кнопки не реагируют на щелчки. Вкладка вне сетки - также нет события клика. Даже на вкладке вне этого (Main, Users ...) нет событий. Если я закомментирую ui-widget-overlay, то все кнопки и вкладки снова будут работать, но цвет экрана станет светлее, а цвет чередующихся строк в сетке станет белым на каждой строке. Почему это случилось?

<link rel="stylesheet" type="text/css" media="screen" href="/plugins/snap/jquery-ui-1.8.16.custom.css" />
<link rel="stylesheet" type="text/css" media="screen" href="/plugins/snap/jqModal.css" />
<script src="/plugins/snap/jquery-1.7.1.min.js" type="text/javascript"></script>
<script src="/plugins/snap/jquery.jqGrid-4.2.0/src/jqModal.js" type="text/javascript"></script>
<script src="/plugins/snap/jquery.jqGrid-4.2.0/js/i18n/grid.locale-en.js" type="text/javascript"></script>
<script src="/plugins/snap/jquery.jqGrid-4.2.0/js/jquery.jqGrid.min.js" type="text/javascript"></script>
<script src="/plugins/snap/jquery-ui-1.8.16.custom/js/jquery-ui-1.8.16.custom.min.js" type="text/javascript"></script>

<style type="text/css">

</style>

<script type="text/javascript">
$().jquery;

function switch_tabs(obj)
{
    $('.tab-content').hide();
    $('.tabs a').removeClass("selected");
    var id = obj.attr("rel");

    $('#'+id).show();
    obj.addClass("selected");
}

var lastsel_devinfo;
$(document).ready(function() {

    $('.tabs a').click(function(){
        switch_tabs($(this));
    });

    switch_tabs($('.defaulttab'));

//$('#devInfo").jqGrid('navGrid','#pager',{},{zIndex:1234},{zIndex:1234},{zIndex:1234},{multipleSearch:true,overlay:false});
 var initialized = [false, false];

    jQuery("#devinfo").jqGrid({
       url:'/plugins/snap/manageList.php?q=3',
        datatype: "json",
        height: 200,
        altRows:true,
        navigator: true,
        pager: '#pager',
        rowNum: 50,


        colNames:['ID','Managed By', 'Serial Number', 'Share Name', 'Device Name','inode'],
        colModel:[
            {name:'id',index:'id',title:false, width:50, sorttype:"int", editable: false},
            {name:'owner',index:'owner',title:false,align:'center', width:100,editable: false},
            {name:'serial',index:'serial',title:false,align:'right', width:225, editable: true},
            {name:'share',index:'share', title:false,width:225,editable: true,editoptions:{size:15,maxlength:30}},
            {name:'name',index:'name',title:false,align:'center', width:90,editable: false},
            {name:'inode',index:'inode',title:false, width:50,editable: false},
        ],
        afterInsertRow: function(rowid, aData, rowelem)
        {
           if ( aData.share != "" && aData.owner == 'unraid' ){
               jQuery("#devinfo").setCell(rowid,'share','',{color:'red'},{'title':"Sorry, can't edit this share name because the device is now managed by unraid."});
           }
        },
        onSelectRow: function(id){
        if(id ) {
            if (  id!==lastsel_devinfo){
                jQuery('#devinfo').jqGrid('restoreRow',lastsel_devinfo);
                var cm =jQuery('#devinfo').jqGrid('getColProp','serial');
                var id = jQuery("#devinfo").jqGrid('getGridParam','selrow');

                var ret = jQuery("#devinfo").jqGrid('getRowData',id);

                if ( ret.owner != 'unraid' ) {
                    var extraparam=new Array();
                    extraparam['serial']=ret.serial;
                    extraparam['oldShareName']=ret.share ;
                    extraparam['owner']=ret.owner ;
                    jQuery('#devinfo').jqGrid('setGridParam',{
                        url:"/plugins/snap/manageList.php?q=1", postData: { serialNumber: ret.serial }
                        });
                    cm.editable = false;

                    jQuery('#devinfo').jqGrid('editRow',id,true
                        ,null      //oneditfunc
                        ,function(response) {
                            var obj=jQuery.parseJSON(response.responseText);
                            if (obj.error) return false;
                            else return true;
                            }
                        ,"/plugins/snap/manageList.php?q=1"
                        , extraparam //extraparam
                        , aftersavefunc //aftersavefunc
                        ,null //errorfunc
                        ,null //afterrestorefunc
                        );

                    }
                    cm.editable = true;
                    lastsel_devinfo=id;


            } else {
                jQuery('#devinfo').jqGrid('restoreRow',lastsel_devinfo);
                lastsel_devinfo="";
                jQuery('#devinfo').jqGrid('resetSelection');
                }
            } //if(id && id
        },  //onSelectRow
        caption: "S.N.A.P."

    //});  //jQuery("#devinfo")
    //jQuery("#devinfo").jqGrid('navGrid','#pager',{ view:false,edit:false,add:false,del:false,search:false});
    }).navGrid( '#pager',{ view:false,edit:false,add:false,del:true,search:false},{zIndex:1234},{zIndex:1234},{zIndex:1234},{multipleSearch:true,overlay:false}).jqGrid('navButtonAdd','#pager',{
        caption:"Add",
        buttonimg:"",
        position:"last" ,
        title:"Add New Row",
        onClickButton: function(){
            alert("Adding Row");
            var datarow = { serial:"test", share:"test" };
            //var su=jQuery('#devinfo').jqGrid('addRowData', 0, datarow, 0);
            jQuery('#devinfo').jqGrid('editGridRow', "new", {});
            }
        }) ;
$('.ui-jqgrid-titlebar-close','#gview_devinfo').remove();

});

function aftersavefunc(rowid, response) {
         //this writes the owner from the server response to the owner cell in the just edited row.
         //because creating will change that cell.
         var obj=jQuery.parseJSON(response.responseText);
         if (obj.error) grid.jqGrid('restoreRow',lastSel);
         else {
              jQuery("#devinfo").jqGrid('setCell',rowid,'owner',obj.owner);
              jQuery('#devinfo').jqGrid('resetSelection');
              }
    }





//jqGrid: how to change cell padding
///2570009/jqgrid-kak-izmenit-zapolnenie-yacheiki
</script>



<?PHP
//phpinfo();
//require_once 'jsonwrapper.php';
//include("jqgrid-php-v1.2/inc/jqgrid_dist.php");
//$grid->navigator = true;

?>

<style type="text/css">


body {
    font-family:Arial;
}
#wrapper {
    width:80%;
}
ul.tabs {
    width:250px;
    margin:0;
    padding:0;
}
ul.tabs li {
    display:block;
    float:left;
    padding:0 5px;
}
ul.tabs li a {
    display:block;
    float:left;
    padding:5px;
    font-size:0.8em;
    background-color:#e0e0e0;
    color:#666;
    text-decoration:none;
}
.selected {
    font-weight:bold;
}
.tab-content {
    clear:both;
    border:1px solid #ddd;
    padding:10px;
}
</style>


<div id="wrapper">
    <ul class="tabs">
        <li><a href="#" class="defaulttab" rel="tabs1">Tab #1</a></li>
        <li><a href="#" rel="tabs2">Tab #2</a></li>
        <li><a href="#" rel="tabs3">Tab #3</a></li>
    </ul>

    <div class="tab-content" id="tabs1">
<table id="devinfo" class="scroll"></table>
       <div id="pager" class="scroll" style="text-align:right;">></div>

    </div>
    <div class="tab-content" id="tabs2">Tab #2 content</div>
    <div class="tab-content" id="tabs3">Tab #3 content</div>
</div>




   <input type="button" onclick = "javascript:add();" value ="add" />
   Click Row to edit Share Name, press ENTER to save or ESC to cancel.

1 Ответ

3 голосов
/ 08 ноября 2012

ui-widget-overlay - это общий класс стилей jquery ui.Он создает наложение на элемент, к которому вы применяете этот класс.

Чтобы создать наложение на jQgrid, вы должны использовать класс jqgrid-overlay.Это предотвратит события щелчка мыши по умолчанию на сетке.
Чтобы вызвать наложение:

$("#lui_"+gridid).show();  

и скрыть его
$("#lui_"+gridid).hide();

...