0

我正在使用 DHTMLX Grid,并且正在使用类似的方法构建多个网格对象

JS:

function renderGrid(render_area, dataURL, skin, loop_index) {
    var scope = this;
    var grid_obj = loop_index + '_grid';
    grid_obj = new dhtmlXGridObject($(render_area).attr('id'));
    grid_obj.selMultiRows = true;
    grid_obj.imgURL = "codebase/imgs/";
    grid_obj.init();
    grid_obj.setSkin(skin);
    grid_obj.load(dataURL);
}

我正在使用 jquery 插件执行此操作。现在我想将“RowSelect”事件附加到所有这些动态创建的网格。

我想在 HTML 页面上使用网格对象并像这样附加事件 0_grid.attachEvent("onRowSelect",scope.clickEvent);

但不幸的是,我无法在 HTML 页面上获取这些动态创建的网格对象(HTML 页面上未定义 0_grid)。

很高兴有人能建议我一些好的解决方案

4

2 回答 2

0

您有 2 个选项,将侦听器附加在其内部renderGrid或外部。我删除了loop_index参数,因为您不需要它:

内:

function renderGrid(render_area, dataURL, skin) {
    var grid_obj = new dhtmlXGridObject($(render_area).attr('id'));

    grid_obj.selMultiRows = true;
    grid_obj.imgURL = 'codebase/imgs/';
    grid_obj.init();
    grid_obj.setSkin(skin);
    grid_obj.load(dataURL);
    grid.attachEvent('onRowSelect', function () {
        // Or instead of an anonymous function you could use this.clickEvent
    });
}

外部(您需要从以下位置返回网格对象renderGrid

function renderGrid(render_area, dataURL, skin) {
    var grid_obj = new dhtmlXGridObject($(render_area).attr('id'));

    grid_obj.selMultiRows = true;
    grid_obj.imgURL = 'codebase/imgs/';
    grid_obj.init();
    grid_obj.setSkin(skin);
    grid_obj.load(dataURL);

    return grid_obj;
}

var grid = renderGrid($('#grid'), '/data.xml', 'dhx_skyblue');
grid.attachEvent('onRowSelect', function () {
    // Or instead of an anonymous function you could use this.clickEvent
});

如果您想在循环中附加事件侦听器,我建议您先阅读JavaScript Garden 中的一段。

于 2013-11-29T14:10:38.343 回答
0

您可以使用jquery 的 .on 方法将事件附加到动态创建的元素。您需要将事件附加到作为网格元素父级的静态元素。

parent.on("event", "selector", "data", handler());
于 2013-11-11T07:44:24.220 回答