选择jsTree节点而不触发select_node事件

时间:2016-09-27 21:27:51

标签: javascript jquery jstree

我有一个jsTree,当用户点击某个节点时,它会触发 select_node 事件。但是,我还有一个列表,其中包含一些带有jsTree中节点id的条目。在选择此列表中的条目时,我只需要从树中选择节点,但不要触发 select_node 事件。根据文档,select_node api有3个参数

  

https://www.jstree.com/api/#/?q=(&f=select_node(obj [,   supress_event,prevent_open])

obj :混合数组可用于选择多个节点
supress_event : 布尔值如果设置为true,则不会触发changed.jstree事件 的 prevent_open : 如果设置为true布尔值,则不会打开所选节点的父节点
但是,它没有讨论抑制 select_node 事件。有什么建议吗?

3 个答案:

答案 0 :(得分:2)

我在这里看到两个选项:

  1. 在手动从代码中选择节点时暂时禁用select_node事件处理程序。
  2. 使用changed事件代替select_node事件,并使用supress标志。

答案 1 :(得分:1)

我不知道是否有更好的方法可以实现这一目标,但这就是我如何做到的:

我没有使用select_node函数,而是编写了一个函数,该函数获取节点的ID然后打开它,将其设置为选中状态,然后递归打开父节点。

$('#TreeDiv').jstree(true).open_node(actualId);
$('#TreeDiv').jstree(true).get_node(actualId).state.selected = true;
var parent = $('#TreeDiv').jstree(true).get_parent(actualId);
while (parent.length > 0) {
    $('#TreeDiv').jstree(true).open_node(parent);
    parent = $('#TreeDiv').jstree(true).get_parent(parent);
}

答案 2 :(得分:1)

您可以使用以下内容;它对我有用

$('#TreeDiv').jstree("select_node", actualId, true);

根据jsTree官方文档,select_node方法接受一个Boolean值作为第二个参数,该值指示是否应抑制相应的事件。参见this page