jqGrid动态解析网格寻呼机ID?

时间:2011-08-14 12:41:45

标签: jquery jqgrid jqgrid-asp.net

我有3个简单的问题。

  1. 我有一些代码告诉我页面中是否存在jqGrid对象:

    //Check if there is a jqGrid on the page and if present, reloads its data ;)
    var jqGrid = $('div.ui-jqgrid-bdiv table');
    if (jqGrid.length) {
        //time to reload
        $(jqGrid).trigger('reloadGrid');
    }
    

    我想找到寻呼机ID元素(如果有的话)。有没有办法做到这一点?

  2. 假设我的jqGrid表中有一个自定义类:

    <table id="myGrid" runat="server" class="customclass"></table>
    <div id="myGrid_pager" runat="server"></div>
    

    如何动态检查jqGrid中是否存在customclass?

  3. 修改

    借助Oleg的帮助,我能够编写一个显示/隐藏默认添加,编辑和删除按钮的reconfigPermissions()功能。这是功能:

    function reconfigPermissions(gridID) {
        var enableRegistry = CanModifyRegistry();
        var ops = ['#add_' + gridID, '#edit_' + gridID, '#del_' + gridID];
        $.each(ops, function (ix, value) {
            var $td = $(value);
            if (enableRegistry === true) {
                $td.show();
            } else {
                $td.hide();
            }
        });
    }
    

    当用户在页面中其他位置定义的组合框中选择另一个日期范围时,将调用此函数。 问题如下:如果在最初加载网格时,用户有权使用默认时间段(在组合框中选择),一切正常。您可以在组合中切换日期范围,按钮会正确显示和消失。 不幸的是,如果用户对最初选择的默认时段没有权限(因此首次创建网格具有{add: false, edit: false, del: false}),即使切换到用户拥有权限的时段,也根本不添加按钮。

    这是绑定到组合框change事件处理程序

    的代码
    $.ajax({
        url: GetBaseWSUrl() + 'MyWebService.asmx/ChangeCurrentPeriod',
        type: "post",
        dataType: "json",
        async: false,
        data: JSON.stringify({ periodID: $(this).val() }),
        contentType: "application/json; charset=utf-8",
        success: function (data) {
            //Check if there is a jqGrid on the page and if present, reloads its data
            var jqGrids = $('div.ui-jqgrid-bdiv table');
            jqGrids.each(function (ix, jqGrid) {
                var gridID = $.jgrid.jqID(jqGrid.id)
                reconfigPermissions(gridID);
                jqGrid.trigger('reloadGrid');
            });
        }
    });
    

    有什么建议吗?

1 个答案:

答案 0 :(得分:12)

您可以通过多种方式找到页面上存在的jqGrids。例如,您可以使用$('table.ui-jqgrid-btable')代替$('div.ui-jqgrid-bdiv table')。此外,你不应该忘记它可以更多地作为页面上的一个jqGrid。我建议您编写代码,以便它可以与页面的许多jqGrids一起使用,即使您当前每页只使用一个jqGrid。

如果您以任何方式找到jqGrid的table元素,您可以使用jqGrids[0]获取第一个找到的网格的DOM元素。 jqGrid使用DOM的一些扩展器。它会添加其他属性gridp。在每个jqGrid方法中,将通过验证grid属性是否存在来检查网格是否已初始化。 p属性为您提供包含p.pager的所有jqGrid参数。您最多可以在网格上创建两个分页器:一个位于网格的顶部边缘,另一个位于底部(有关详细信息,请参阅this)。所以你需要的代码看起来像

var jqGrids = $('table.ui-jqgrid-btable');
if (jqGrid.length > 0) {
    jqGrid.each(function(i) {
        if (this.grid) {
            // one more test for the jqGrid
            // jqGrid[i] is a jqGrid
            if (this.p.toppager) {
                // this.id + '_toppager' is the id of the top pager
            }
            if (this.p.pager) {
                // this.p.pager is the id of the bottom pager
            }
        }
    });
}

要测试table元素是否包含某个customclass类,您可以使用jQuery.hasClass

更新:在评论中,您问我如何隐藏或动态显示导航栏中的按钮。我准备了the demo来证明这一点:

enter image description here

如果检查放置在网格上方的按钮,则导航栏中的相应按钮将被隐藏。取消选中将显示相应的按钮。

代码只需调用$('#add_list').hide()$('#add_list').show()即可隐藏/显示“添加”按钮。在示例中,id =“add_list”的最后一部分是用于创建网格的<table>元素的id。其他标准按钮的ID以以下前缀开头:'edit_''view_''del_''search_''refresh_'。如果网格的id具有特殊字符,则更常用的代码如下所示:

var grid = $("#list"),
    gid = $.jgrid.jqID(grid[0].id);

$('#cbAdd').change(function () {
    var $td = $('#add_' + gid);
    if ($(this).is(':checked')) {
        $td.hide();
    } else {
        $td.show();
    }
});

要查找由navButtonAdd添加的自定义导航器按钮,我使用title属性:

$('#cbChooseColumns').change(function () {
    var $td = $(grid[0].p.pager + '_left ' + 'td[title="choose columns"]');
    if ($(this).is(':checked')) {
        $td.hide();
    } else {
        $td.show();
    }
});