Javascript 禁用整个jsTree
我使用的是jsTree,它的右边有一个表单,该表单基于所选节点,可以编辑/保存。目标是防止用户在编辑表单时单击树上的任何其他位置 是否有任何方法可以临时禁用/启用树功能,同时保持树在视觉上可用 我尝试使用Javascript 禁用整个jsTree,javascript,jquery,jstree,Javascript,Jquery,Jstree,我使用的是jsTree,它的右边有一个表单,该表单基于所选节点,可以编辑/保存。目标是防止用户在编辑表单时单击树上的任何其他位置 是否有任何方法可以临时禁用/启用树功能,同时保持树在视觉上可用 我尝试使用disable\u node(obj)方法并将其应用于树的根,但似乎不是一个解决方案 有什么建议吗?或者这不是jsTree库的一个可能特性 感谢禁用所选节点,请按以下方式执行: var node = $("#tree").jstree().get_selected(); $("#tree").j
disable\u node(obj)
方法并将其应用于树的根,但似乎不是一个解决方案
有什么建议吗?或者这不是jsTree库的一个可能特性
感谢禁用所选节点,请按以下方式执行:
var node = $("#tree").jstree().get_selected();
$("#tree").jstree().disable_node(node);
要禁用所有节点,请使用:
$('#tree li').each( function() {
$("#tree").jstree().disable_node(this.id);
})
更新
我没有找到阻止打开已禁用节点的方法,所以我也只是禁用已关闭节点的所有子节点
请参见演示:编辑,正如@charles所指出的,禁用节点并不会禁用菜单插件(至少在自定义菜单中)或拖放-添加第4点以解决此问题 禁用整个树
core.check\u callback=false
var数据1=[{
“id”:“W”,
“文本”:“世界”,
“state”:{“opened”:true},
“儿童”:[{“文本”:“亚洲”},
{“案文”:“非洲”},
{“案文”:“欧洲”,
“state”:{“opened”:false},
“儿童”:[“法国”、“德国”、“英国”]
}]
}];
$('#Tree').jstree({
核心:{数据:data1,
检查回调:true
},
插件:['dnd','contextmenu','checkbox']
})
函数禁用有缺陷(){
//这还不够
$('#Tree li.jstree node')。每个(函数(){
$('#Tree').jstree(“禁用_节点”,this.id)
})
}
函数禁用(){
//禁用可见节点
$('#Tree li.jstree node')。每个(函数(){
$('#Tree').jstree(“禁用_节点”,this.id)
})
//阻止打开新节点
$(“#Tree i.jstree-ocl”)
.off('click.block')
.on('click.block',function(){
返回false;
});
//最终…dbl单击
$('#Tree').jstree().settings.core.dblclick_toggle=false;
//最终…阻止所有编辑
$('#Tree').jstree().settings.core.check_callback=false;
}
函数启用(){
//再次启用可见节点
$('#Tree li.jstree node')。每个(函数(){
$('#Tree').jstree(“enable_node”,this.id)
});
//ublock打开新节点
$(“#Tree i.jstree-ocl”)
//
.off('click.block');
//最终…dbl单击
$('#Tree').jstree().settings.core.dblclick_toggle=true;
//最终…取消阻止所有编辑
//设置为true或重置为您正在使用的任何用户定义函数
$('#Tree').jstree().settings.core.check_callback=true;
}
禁用(坏)
禁用(确定)
使可能
除了尼古拉·埃尔马科夫的回答之外,禁用节点不会禁用菜单插件(至少是自定义菜单)或拖放。如果您想这样做,您需要在这些函数中添加一个额外的检查(使用JsTree 3.2.1进行测试)
另一种方法是使用一些东西在jsTree之外执行一些常规的阻塞。这个怎么样
// get an instance of jstree.
var tree = $.jstree.create('#tree', { ... });
// disable all nodes with one line.
tree.disable_node(tree.get_json(null, { flat: true }));
你找到解决办法了吗?你好,尼古拉,谢谢你的回复。我最后做的是禁用我的树所在的div容器。我将把它标记为被接受的答案,因为这是一个很好的方法,实际上对我来说,禁用树和div中的所有组件更好。再次感谢!1小提琴似乎与树禁用没有任何关系。2至少在jstree 3中,此方法仅禁用打开的节点,但您仍然可以单击禁用节点上的“打开”图标并打开不会禁用的子树。此方法对我有效,而其他答案不会禁用所有这些交互。唯一的问题是树区域看起来没有被禁用,您可能需要更改,设置较暗的背景等@enigment将所有节点置为灰色对我来说就足够了(甚至太多)。但是设置容器区域的颜色很容易——也许最好的方法是添加一个特定的类是的,同意,让我惊讶的是jsTree没有内置此功能。我们不可能是唯一想使整棵树成为只读的人。@enigment这是rel 1的一个特性。可能导致了一些意想不到的问题,所以它被留下了
// get an instance of jstree.
var tree = $.jstree.create('#tree', { ... });
// disable all nodes with one line.
tree.disable_node(tree.get_json(null, { flat: true }));