Подтвердить что ты не робот

Событие checkbox событий JQuery Jstree

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

Спасибо...

4b9b3361

Ответ 1

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

Вам нужно связать "загруженное" событие, прежде чем создавать экземпляр jstree, поэтому я предполагаю, что это так же происходит с событием "change_state" . Другая вещь, на которую следует обратить внимание, заключается в том, что "change_state" - это больше, чем просто изменение из-за флажка. Например, он также срабатывает, когда вы разворачиваете node (но не сворачиваете, по какой-то причине). Тем не менее, я делаю некоторые 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 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) для объекта, содержащего проверяемые узлы. Используйте функцию jquery.each для обработки узлов.

Ответ 2

Текущая версия 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"));});