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

我有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表中有一个自定义类:

     

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

编辑:

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

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

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

这是绑定到comboboxchange事件处理程序的代码

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

有什么建议吗?

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

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

 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 。

更新 :在评论中,您问我如何隐藏或动态显示导航栏中的按钮。 我准备了演示 ,演示了这个:

在此处输入图像描述

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

代码只需调用$('#add_list').hide()$('#add_list').show()来隐藏/显示“添加”按钮。 在示例中,id =“add_list”的最后一部分是用于创建网格的

元素的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(); } });