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内容的最大字符大小。我也尝试直接采用
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
。