【问题标题】:Select jsTree node without triggering select_node event在不触发 select_node 事件的情况下选择 jsTree 节点
【发布时间】:2016-09-27 21:27:50
【问题描述】:

我有一个 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 事件。有什么建议吗?

【问题讨论】:

  • 为什么要阻止此事件触发?
  • 因为我只想选择此条目以在从列表中进行选择时突出显示它。
  • 我认为你应该发布你的代码,更好的 jsFiddle,让你的问题更清楚

标签: javascript jquery jstree


【解决方案1】:

我在这里看到两个选项:

  1. 在您从代码中手动选择节点时暂时禁用您的 select_node 事件处理程序。
  2. 使用changed 事件而不是select_node 事件并使用抑制标志。

【讨论】:

  • 很抱歉这么晚才接受。我使用了第二个选项。
  • Changed 也为我工作,虽然我不太清楚为什么。
【解决方案2】:

我不知道是否有更好的方法来完成它,但我是这样做的:

我没有使用 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);
}

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-15
    • 2011-02-10
    相关资源
    最近更新 更多