2011-01-28 4 views
12

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

Благодаря ...

+0

который вы используете? – Vivek

+0

@Vivek, вероятно, jquery.jstree. @ user529011 Можете ли вы привести пример кода, используемого вами. Может быть, изолировать вашу проблему на http://www.jsfiddle.net – Raynos

+0

jquery jstree v.1.0-version – user529011

ответ

3

Текущая версия jstree кажется, есть проблема с привязкой check_node.jstree. Также привязка select_node.jstree не запускается с плагином-флажком, активным с текущей версией.

Отправляйтесь в HERE, где можете задать вопросы о создателе или даже просмотреть уже заданные вопросы.

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

+1

Простое примечание - новая версия jstree использует ссылку "(без подчеркивания). –

22

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

+0

сохранен мой день ... –

+0

В чем смысл написания плагина для дерева данных без очевидного API событий? Кажется, это немного надзор! – rgvcorley

+1

Я беру это обратно - события 'check_node.jstree' и' uncheck_node.jstree' запускаются, его просто нет в документации для jstree. – rgvcorley

Смежные вопросы