在客户端控件呈现后触发的JavaScript事件

Trigger JavaScript event that fires after client side control is rendered

本文关键字:JavaScript 事件 客户端 控件      更新时间:2023-09-26

大家好,

我有一个网页,用户在一个下拉菜单中进行选择。

一旦选择下拉菜单中的项目,就会出现一个剑道网格,并显示通过返回JSON的API调用检索到的记录列表。

我已经编写了代码,对网格显示时生成的html表进行某些修改,但此代码目前由按钮触发。这不是我想要的行为。

我需要在网格渲染后触发一个事件,以便代码自动执行,而不是由按钮触发。

是否有可能通过JQuery,我可以以某种方式绑定一个事件后触发网格控件已经完成渲染?

注:文档中现有的Kendo网格事件都不能满足我的需要,甚至数据源"requestEnd"也不行,因为在那个时候,页面中还没有生成网格的HTML。如果存在像"postRender"这样的事件,那就再好不过了。

检测'渲染'是困难的。Firefox有一个MozAfterPaint事件,但它不是标准的,我不知道你如何确保它只为你的特定事件触发。

或者,您可以尝试查看DOM突变事件,但它们也不支持,并且在浏览器UI中DOM更改和网格更新之间仍然可能存在延迟。

你最好的办法是修改网格HTML来输出一些JS,从而触发一个预定义的回调。

当你的javascript在HTML内容被渲染之前运行时,尝试使用setTimeout(function () {}, 0)"暂停"javascript执行,让渲染线程赶上。你的调用看起来就像这样:

$("#grid").kendoGrid({
    dataBound: function(e) {
        setTimeout(function () {
            console.log("dataBound");
        }, 0);
    }
});
为什么setTimeout(fn, 0)有时是有用的?