2011-01-28 96 views
12

我完全不熟悉jQuery和jstree。我正在使用jstree并使用xml填充数据。但是想要捕获每个节点的事件,无论是否与他们的ID一起检查。我尝试使用jstree的插件API,如change_state(),check_node()select_node(),但它不起作用。此外,我想获得一个数组中的所有选定的节点数据作进一步处理..任何人都可以帮忙吗?Jquery Jstree复选框事件捕获

谢谢...

+0

您正在使用哪个jstree插件? – Vivek 2011-01-28 12:13:10

+0

@Vivek可能jquery.jstree。 @ user529011你可以举一个你使用的代码的例子吗?也许隔离你的问题在http://www.jsfiddle.net – Raynos 2011-01-28 12:28:11

+0

jquery jstree v.1.0-版本 – user529011 2011-01-28 12:37:20

回答

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"));});

22

我喜欢jstree插件获得每个项目的ID,但它不是有据可查的,也不是建立符合说,插件开发的jQuery UI的标准。我已经使用1.0rc2来完成你想要做的事情。

在实例化jstree之前,你必须绑定“loaded”事件,所以我猜它和“change_state”事件是一样的。另外要注意的是,“change_state”不仅仅是一个复选框的变化。例如,当你展开一个节点时它也会被触发(但由于某种原因,不会崩溃)。也就是说,我在“change_state”处理程序中做了一些kludgey检查,试图从checkbox变更中滤除不需要的事件。窃听处理程序的最小码为

$("#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)包含已签子节点的对象。使用jquery的.each函数来处理节点。