jQuery Jstree 复选框事件捕获

12

我完全不懂jQuery和jstree。我正在使用jstree并使用XML填充数据。但是,我想捕获每个节点的事件,无论是否选中以及它们的ID。我尝试使用jstree的插件API(如change_state()check_node()select_node()),但不起作用。另外,我想获取所选节点数据的数组以供进一步处理。有谁能帮忙吗?

谢谢...


你正在使用哪个jstree插件? - Vivek
@Vivek 可能是jquery.jstree。@user529011 你能给出你正在使用的代码示例吗?也许可以在http://www.jsfiddle.net上隔离你的问题。 - Raynos
function checked_unchecked(){ $.jstree._reference("#demo").get_selected(); } 这个函数会返回对象,但是没有选中项的id。我也尝试了绑定check_node和select_node事件,像这样.jstree().bind("check_node.jstree",function(data){ alert(data); }),但是没有结果。 - user529011
2个回答

22

我喜欢jstree插件,但它的文档不够完善,也不符合jQuery UI插件开发的标准。我已经使用1.0rc2来完成你想做的事情。

在实例化jstree之前,你必须绑定"loaded"事件,所以我猜"change_state"事件也是一样的。另一个要注意的是,"change_state"不仅仅是由复选框引起的更改。例如,当你展开一个节点时,它也会触发(但出于某种原因不会折叠)。话虽如此,在"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)获取包含已选中子节点的对象。使用jQuery的.each函数来处理这些节点。


写一个数据树的复选框插件,却没有明显的事件API,这有什么意义呢?看起来有点疏忽! - rgvcorley
1
我收回之前的说法 - check_node.jstreeuncheck_node.jstree 事件确实被触发了,只是在 jstree 的文档中没有提到。 - rgvcorley
如何获取仅点击元素(即d.rslt)的属性?@Toadmyster - Shibankar

3
当前版本的jstree似乎存在与check_node.jstree绑定相关的问题。此外,使用当前版本时,checkbox插件处于活动状态时,select_node.jstree绑定不会触发。
请前往此处,您可以向创建者提问或查看已经提出的问题。
至于$.jstree._reference("#demo").get_selected();,您可以使用$.jstree._reference("#demo").get_selected().each(function(index,element){alert($(element).attr("id"));});来获取每个项目的ID。

1
简短说明 - jstree 的新版本使用“reference”(没有前导下划线)。 - Nathan Crause

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接