javascript - IE8 中可能存在 jQuery/jqGrid 问题

标签 javascript jquery internet-explorer-8 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 = '<input type="radio" value=' + value + ' name="radioid" ondblclick="inDetail();"/>';
  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<br/>$l10n.lbl_3768','$l10n.lbl_owner','$l10n.lbl_256 $l10n.lbl_92','$l10n.lbl_1558<br>$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 数据传输没有问题,因为网格以前在 IE8 中工作,当时没有 setGridHeightloadComplete 处理程序。我还做了一些小的修改,我只能部分地重新计数(即禁用列大小调整)。 出于测试目的,这里是一个 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();
    }

最佳答案

我无法重现您所描述的问题。如何查看here网格可以在 IE 中毫无问题地加载。由于缺少 CSS,它看起来不太好,但总体来说一切正常。所以我想你的代码有问题,你没有在这里发布。我建议您在 http://validator.w3.org/ 中验证您的 HTML 页面,您的测试 JSON 结果为 http://www.jsonlint.com/http://www.jslint.com/ 中的 JavaScript 代码.

我只是不建议您在具有相同名称 radio 的函数内部使用 radio 变量。最好选择另一个名字。最好还添加 10 作为 parseInt 函数的第二个参数。在我的测试中,您的原始代码在没有相应代码更改的情况下也可以工作。

关于javascript - IE8 中可能存在 jQuery/jqGrid 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4625152/

相关文章:

html - Internet Explorer 8 兼容性问题

javascript - jQuery 文件上传响应不包含 IE < 10 中的 jqXHR.responseText 属性

html - 背景图像在 AngularJS 的 IE8 中不起作用

javascript - 如何删除数据库中的概念页面?

javascript - 如何将环境特定的 URL 获取到我的 AngularJS Controller 中?

javascript - 使用 javascript 全局设置 toastr 选项

javascript - jquery tablesorter filter - 如何计算过滤后的行数

Javascript 疯狂想法寻找节点

javascript - 检查网络服务器是否在线/离线

javascript - 在后退按钮 IE11 上触发 document.ready