Захват событий Jquery Jstree - PullRequest
12 голосов
/ 28 января 2011

Я совершенно новичок в jQuery и jstree.Я использую jstree и заполняю данные с помощью xml.Но хотел бы захватить событие для каждого узла, независимо от того, отмечен он или нет вместе со своими идентификаторами.Я пытался использовать API плагинов jstree, например change_state(), check_node() или select_node(), но он не работает.Также я хотел бы получить данные всех выбранных узлов в массиве для дальнейшей обработки. Может ли кто-нибудь помочь?

Спасибо ...

Ответы [ 2 ]

22 голосов
/ 31 марта 2011

Мне нравится плагин jstree, но он плохо документирован и не создан, чтобы соответствовать, скажем, стандартам jquery ui разработки плагинов.Я использовал 1.0rc2, чтобы выполнить то, что вы пытаетесь сделать.

Вы должны связать «загруженное» событие, прежде чем создавать экземпляр jstree, поэтому я предполагаю, что то же самое с событием «change_state».Другая вещь, на которую следует обратить внимание, это то, что «change_state» - это больше, чем просто изменение из-за флажка.Например, он также будет срабатывать при расширении узла (но не по какой-то причине).Тем не менее, я делаю некоторую проверку kludgey в обработчике "change_state", чтобы попытаться отфильтровать нежелательные события от изменения флажка.Минимальный код для подключения к обработчику:

$("#treeElement").bind("change_state.jstree", function (e, d) {
    var tagName = d.args[0].tagName;
    var refreshing = d.inst.data.core.refreshing;
    if ((tagName == "A" || tagName == "INS") &&
      (refreshing != true && refreshing != "undefined")) {
    //if a checkbox or it's text was clicked, 
    //and this is not due to a refresh or initial load, run this code . . .
    }
});

В таком случае выбранный вами элемент равен d.rslt, и вы можете получить отмеченные элементы с помощью d.inst.get_checked() только для выбранного элемента или d.inst.get_checked(d.rslt) для объекта, содержащегоподузлы, которые проверены.Используйте функцию jequery .each для обработки узлов.

3 голосов
/ 02 февраля 2011

В текущей версии jstree, похоже, есть проблема с привязкой check_node.jstree. Кроме того, привязка select_node.jstree не срабатывает, когда подключаемый модуль флажка активен в текущем выпуске.

Перейдите на ЗДЕСЬ , где вы можете задать вопросы создателю или даже просмотреть уже заданные вопросы.

Что касается $.jstree._reference("#demo").get_selected();, то вы можете получить идентификатор каждого элемента, используя $.jstree._reference("#demo").get_selected().each(function(index,element){alert($(element).attr("id"));});

...