问题 取消选择所选的treenode JStree - jquery


情况

当我的页面加载并且我的树视图是可见的时,没有选择treenode。 当我点击一个节点时,它被选中,这是默认行为。

如何在单击同一节点时取消选择节点?所以我想点击一个选定的节点取消选择它。我一直在搜索文档。但事件'select_node'将首先选择节点,然后才能检查它的selectstatus。

我知道有一种方法可以在单击按钮时取消选择带代码的节点,但这不是我想要的。我想单击已选择的节点。

有人能帮我吗?

链接)

文档事件JStree: http://www.jstree.com/api/#/?q=.jstree%20Event&f=enable_node.jstree


12213
2018-02-27 14:40


起源

是否要将此选定/取消选择状态保存到服务器端?因此,下次再次加载树时,会返回相同的状态,从那里离开? - Tushar Sharma
不,当我在树外单击时,我只是不想选择节点。 - Cedric Berlanger
这里有一些很好的建议: stackoverflow.com/questions/11576444/... 。您应该按CTRL取消选择。 - Gabriel Lupu


答案:


今天突然出现了这个问题。我预计至少可以在初始化树时设置一个配置选项。虽然它不漂亮,但这是我为避免这个问题所做的:

var _selectedNodeId;
$("#myTree").on("select_node.jstree", function (e, _data) {
    if ( _selectedNodeId === _data.node.id ) {
        _data.instance.deselect_node(_data.node);
        _selectedNodeId = "";
    } else {
        _selectedNodeId = _data.node.id;
    }
}).jstree();

本质上,我正在跟踪所选节点并针对已单击的节点进行检查。这种方法的缺点是,如果你在“changed.jstree”上有一个回调触发,它将触发两次,因为你先“选择”然后“取消选择”,如果它已被选中。


10
2018-05-21 19:05



_data.instance.deselect_node(_data.node); < - 这是我一直在寻找的神奇的代码行。谢谢。 - BrianLegg


我找到了一种通过添加来启用此行为的方法 multiselect 插入。并设置 multiple 配置选项 false 当你想要单选时:

$('#my-tree').jstree({
  core: { multiple: false },
  plugins: ['multiselect']
})

0
2018-02-09 09:46