我有一个jsTree,当用户单击一个节点时,它触发select_node事件。但是,我还有一个列表,其中包含一些带有jtree中节点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事件。有什么建议吗?
这里有两个选项:
- 当你手动从代码中选择一个节点时,暂时禁用你的
- 使用
changed
事件代替select_node
事件,并使用抑制标志
select_node
事件处理程序。我不知道是否有更好的方法来完成它,但我是这样做的:
我没有使用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);
}
您可以使用以下格式;它适合我
$('#TreeDiv').jstree("select_node", actualId, true);
根据jsTree官方文档,select_node
方法接受Boolean
值作为第二个参数,该参数指示是否应该抑制相应的事件。