IE8中可能存在jQuery / jqGrid问题

我有一个用jqGrid构建的网格,它使用搜索工具栏,自定义格式化程序来插入radio选框和loadComplete处理程序。 在FF中一切正常但是当我去IE8时(羞耻!!!)屏幕会因加载的数据和屏幕上的Loading...框而冻结。 我在屏幕上什么都不做。

这是我的代码:

 function loadCompleteHandler(){ jQuery("#listTable").jqGrid('setGridHeight', Math.min(300,parseInt(jQuery(".ui-jqgrid-btable").css('height')))); } function radio(value, options, rowObject){ var radio = ''; return radio; } function statusSelect(){ #set($select = ":$l10n.lbl_123") #foreach($se in $status_list) #set($select = $select + ";$se.getValue():$se.getValue()") #end return "$select"; } jQuery(function(){ jQuery("#listTable").jqGrid({ url: '$content.getURI("/servlet/ajax/MyServlet.json")' + '?loggedUserId=$loggedUserId&pageNo=0&locale=' + '$l10n.getLocale().toString()', datatype: 'json', mtype: 'POST', colNames:['','$l10n.lbl_copy','$l10n.lbl_476','$l10n.lbl_380', '$l10n.lbl_2547
$l10n.lbl_3768','$l10n.lbl_owner','$l10n.lbl_256 $l10n.lbl_92','$l10n.lbl_1558
$l10n.lbl_185','$l10n.lbl_348'], colModel :[ {name:'column1', index:'column1', width:'3%', search:false, align:'center', formatter: radio, editable:false, sortable: false, resizable:false}, {name:'column2', index:'column2', width:'6%', search:false, align:'center', formatter:'checkbox', sortable: false, resizable:false}, {name:'column3', index:'column3', width:'12%', sortable: false, stype:'select', editoptions:{value: statusSelect()}, resizable:false}, {name:'column4', index:'column4', width:'17%', search:false, sortable: false, resizable:false}, {name:'column5', index:'column5', width:'10%', search:false, sortable: false, resizable:false}, {name:'column6', index:'column6', width:'13%', sortable: false, resizable:false}, {name:'column7', index:'column7', width:'13%', sortable: false, resizable:false}, {name:'column8', index:'column8', width:'12%', sortable: false, resizable:false}, {name:'column9', index:'column9', width:'14%', sortable: false, resizable:false} ], width:'768', height: 300, loadonce:true, pager: '#pagerDiv', gridview: true, rowNum:15, rowTotal: 500, sortorder: 'desc', viewrecords: true, loadComplete: loadCompleteHandler }); }); jQuery(function(){ jQuery("#listTable").jqGrid('filterToolbar',{ stringResult: true, searchOnEnter: false, defaultSearch:'cn'}); /* search strategy meaning: contains */ });

我正在使用Velocity,jQuery 1.4.2。 IE在此行的jQuery库中给出了无效的参数错误:

  if ( set ) { style[ name ] = value; } 

也许问题出在IE8中的jQuery,我不知道….

编辑 :添加更具体的数据

我正在使用jqGrid 3.8.2。 Velocity处理后的statusSelect如下所示:

 function statusSelect(){ return ":All;status1:status1;status2:status2"; } 

我认为JSON数据传输没有问题,因为当没有setGridHeightloadComplete处理程序时,网格以前在IE8中工作。 我还做了一些小修改,我只能部分重新计算(即禁用列resize)。 出于测试目的,这里是一个JSON对象:

  { "page":"1", "records":2, "rows":[{"id":150,"cell":[150,false,"status1","columnData4","columndata5","columndata6","columndata7","Test1\u003cbr/\u003e\u003cspan style\u003d\u0027float:right;\u0027\u003e10.12.2010\u003c/span\u003e","columnData"]}, {"id":157,"cell":[157,false,"status2","columnData41","columndata51","columnData61","columnData71","Test2\u003cbr/\u003e\u003cspan style\u003d\u0027float:right;\u0027\u003e22.12.2010\u003c/span\u003e","columnData"]}], "total":50.0 } 

我不知道如何使用total参数,所以我只声明了一个任意值(50D)。 inDetail函数只提交表单(我在这里使用Apache Turbine参数):

  function inDetail(){ document.forms['myForm'].eventSubmit_doAction.value = 'doSomeAction'; document.forms['myForm'].submit(); } 

我无法重现您描述的问题。 如何在这里看到网格可以在IE中加载而没有任何问题。 由于缺少CSS,它看起来不太好,但一般都可以。 所以我想你在这里没有发布的代码中存在问题。 我建议您在http://validator.w3.org/validation您的HTML页面,在http://www.jsonlint.com/上测试JSON结果,在http://www.jslint.com/中validation JavaScript代码。

我不建议你在函数内使用同名radio radio变量。 最好选择其他名称。 最好添加10作为parseInt函数的第二个参数。 在我的测试中,您的原始代码也没有相应的代码更改。