Jqgrid – 未捕获RangeError:超出最大调用堆栈大小

动态列宽根据其内容

我试着通过这种方式动态调整列宽,通过查找每行的字符长度,然后最终获得最大长度并将其设置为网格列宽。

loadComplete : function () { $("#grid").on("jqGridAfterLoadComplete jqGridRemapColumns", function () { var $this = $("#grid"), colModel = $this.jqGrid("getGridParam", "colModel"), iCol, iRow, rows, row, n = $.isArray(colModel) ? colModel.length : 0; var rowData = ""; var rowDataLen=""; var input = []; var divs = $( "div" ); var colWidth=125; for (iCol = 0; iCol < n; iCol++) { input = []; for (iRow = 0, rows = this.rows; iRow < rows.length; iRow++) { row = rows[iRow]; rowData = $(row.cells[iCol]).find(divs).html(); if(rowData != undefined) rowDataLen = rowData.length; input.push(rowDataLen); } var finalWidth = Math.max.apply(null, input); if(finalWidth < colWidth) finalWidth = colWidth; $("#grid").jqGrid("setColWidth", iCol, finalWidth); var gw = $("#grid").jqGrid('getGridParam','width'); $("#grid").jqGrid('setGridWidth',gw); } }); }, 

它工作正常。

但是它太慢并且没有达到Uncaught RangeError:超出了最大调用堆栈大小

当我有更多像500这样的记录时出错。

任何人都可以帮助调整上述解决方案,以便它可以更快?

这是我的HTML代码:

  
Hot-forged Hot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forgedHot-forged.

tttttttttttttttttttttttttttttttt

我实际上找到了div内容的最大字符大小。我也尝试直接采用

这种方式的title属性 – rowData = $(row.cells[iCol]).attr('title'); – 但它也给出了同样的错误

用于固定行高的colum模型格式化程序:

formatter:function(cellvalue){if(cellvalue == undefined || cellvalue == null){cellvalue =“”; } return”+ cellvalue +”; },

或者我如何降低此代码的性能? 请帮忙..

您发布的代码是错误的,但我确定您的代码的其他位置是长title和长单元格内容的来源。

您发布的代码中的主要错误: 您不应该在loadComplete绑定到网格loadComplete将被执行多次。 在每次执行时,您都会添加一个绑定,这是错误的。 而不是你应该移动$("#grid").on("jqGridAfterLoadComplete jqGridRemapColumns", function () {...}); 并在创建网格之前设置它。 您应该了解jqGridAfterLoadComplete是每次在loadComplete之前触发的事件。 我想你以某种方式产生递归。

我会严格建议您迁移到自由jGrid (请参阅此处 )或至少使用我在jQuery.jqGrid.autoWidthColumns.js发布的autoWidthColumns方法(请参阅此处 )。 有关更多信息和旧演示,请参阅答案 。 你需要的只是使用$("#grid").jqGrid("autoWidthColumns"); 在创建网格之前。 所有必需的绑定( $("#grid").on("jqGridAfterLoadComplete jqGridRemapColumns", function () {...}); )在内部执行方法autoWidthColumns