Присоединение события rowSelect к динамически создаваемой сетке DHTMLX

0

Я работаю с сетью DHTMLX, и я создаю несколько объектов сетки, используя метод, подобный

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 (0_grid не определен на странице HTML).

Рад, если кто-нибудь может предложить мне хорошее решение

  • 0
    просто добавьте в функцию renderGrid строку grid_obj.attachEvent ("onRowSelect", scope.clickEvent); вам не нужно имя, чтобы прикрепить событие только объект, который у вас уже есть
Теги:
dhtmlx

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.

0

Вы можете использовать метод jquery.on для присоединения событий к динамически созданным элементам. Вам нужно будет привязать событие к статическому элементу, который является родительским элементом ваших элементов сетки.

parent.on("event", "selector", "data", handler());
  • 0
    спасибо за ответ. Но этот обработчик был бы статическим обработчиком. Фактически сетка позволяет обработчику основываться на идентификаторе строки данных. Так что, используя вышеупомянутую опцию, я не смог бы сделать требуемый.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню