是否存在将在呈现动态生成的表时调用的JQuery事件?

时间:2013-01-21 12:06:58

标签: jquery events dom

我有一个我正在处理的数据网格控件,它使用总共4个表来生成固定列标题,列标题,固定单元格和单元格(左上角,右上角,左下角,右下角)底部垂直滚动,右边滚动水平滚动)。某些表(在这种情况下是固定单元格[vertical]和非固定列标题[水平])之间的对齐必须与滚动表同步,并且表头宽度是从表格中的隐藏标题计算的数据。即使对于非常大的(100k +行)数据集,这也很有效 - 除了最初加载时。该表是动态生成的(通过AJAX回调),我正在寻找一种方法,最好在JQuery中调用一个自定义render()函数,该函数在创建表并最初由浏览器呈现之后调整标题大小(刚刚插入isn)不够,它必须在浏览器处理完所有文本指标/边框/填充/边距计算并最初渲染表格后才能从中拉出适当的宽度。“

TL; DR:需要一个事件或一些hack,它允许我在为一个已经通过DOM或JQuery调用动态创建的表呈现表的内容之后调用一个函数(最好不要像setTimeout一样被黑客攻击)呼叫)。

1 个答案:

答案 0 :(得分:0)

必须通过创建一个调用函数的setTimeout来解决这个问题,该函数重复检查大小的变化,如下所示(排除了一些不直接相关的代码):

function Datagrid() {
    var _this = this; setTimeout(function () { _this.CheckAutoColumns(); }, 20);
}
function Datagrid_CheckAutoColumns() {
    if (this != null) {
        var render = false;
        for (var i = 0; i < this.Columns.length; i++) {
            if (this.Columns[i].__LastWidth != this.Columns[i].Container.width()) {
                render = true;
                break;
            }
        }
        if (render == true) { this.Render(); }
        if (this.Disposing === false) { var _this = this; setTimeout(function () { _this.CheckAutoColumns(); }, 20); }
    }
}
Datagrid.prototype.constructor = Datagrid;
Datagrid.prototype.CheckAutoColumns = Datagrid_CheckAutoColumns;