jqGrid getCell方法在IE8中返回undefined

时间:2012-04-02 13:22:31

标签: jqgrid

在使用jqGrid的getCell方法时,它总是在IE8中返回undefined。在Mozilla上它运行正常。

$('#grid').jqGrid('getCell',id,column); //returns undefined in IE8 :(

我是否应该使用此answer中定义的方法。

function getCellValue(rowId, cellId) {
   var cell = jQuery('#' + rowId + '_' + cellId);        
   var val = cell.val();
   return val;
}

最好的方法是什么? 我已经实现了treegrid并使用了jqGrid的4.3.1版。

我的配置是

var grid = $("#grid").jqGrid({
treeGrid: true,
treeGridModel: 'adjacency',
ExpandColumn: 'businessAreaName',
ExpandColClick : true,
url:'agileProgramme/records.do',
datatype: 'json',
mtype: 'GET',
colNames:['Id'
          , 'Business Area'
          , 'Investment'
          , 'Org'
          , 'Goal'
],
colModel:[
/*00*/          {name:'agileProgrammeId',index:'agileProgrammeId', width:0, editable:false,hidden:true},
/*01*/          {name:'businessAreaName',index:'businessAreaName', width:160, editable:false},
/*02*/          {name:'programmeName',index:'programmeName', width:150, editable:false, classes:'link'},
/*03*/          {name:'org',index:'org', width:50, editable:false, classes:'orgHierarchy', sortable : false},
/*04*/          {name:'goal',index:'goal', width:70, editable:false}
],
treeReader : {
    level_field: "level",
    parent_id_field: "parent", 
    leaf_field: "leaf",
    expanded_field: "expanded"
},
autowidth: true,
height: 240,
pager: '#pager',
sortname: 'id',
sortorder: "asc",
toolbar:[true,"top"],
caption:"TableGridDemo",
emptyrecords: "Empty records",
jsonReader : {
    root: "rows",
    page: "page",
    total: "total",
    records: "records",
    repeatitems: false,
    cell: "cell",
    id: "agileProgrammeId"
}
});   

感谢Oleg的回复。我找到了问题的根本原因。它位于jqGrid的$ .unformat方法中。

 return ret !== undefined ? ret : cnt===true ? $(cellval).text() : $.jgrid.htmlDecode($(cellval).html());

我把它改成了

return (typeof ret != 'undefined') ? ret : cnt===true ? $(cellval).text() : $.jgrid.htmlDecode($(cellval).html());

实际上ret !== undefined在ie8中不起作用。有一次,我将其更改为typeof ret != 'undefined',它的工作方式与预期一致。

1 个答案:

答案 0 :(得分:1)

我认为您在错误的地方使用了getCell。在getCell或其他一些回调中使用loadComplete的最安全的地方。在情况下,您确定您尝试读取的数据已经在jqGrid中。 IE8和其他网络浏览器一样慢,所以我只能假设即使你在错误的位置使用了getCell现代浏览器已经读过网格包含,所以测试成功了。

The demo我是根据您之前发布的代码制作的。它从getCell的第一个加载行读取'programmeName',并显示alert。如何验证代码在IE8中没有任何问题。