【发布时间】:2021-06-26 03:04:53
【问题描述】:
我为 jsTree 插件创建了一个基于类选择器的通用代码。我将此插件应用到另一个页面。我只想在该特定页面上允许单个选择。我将multiple 属性设置为false。但它不起作用。我触发了changed.jstree 事件来显示/隐藏某个节点的事件下拉列表。我试图在该事件中禁用选择,但这也不起作用。
请帮我解决这个问题。
jsTree插件常用代码:
$(".jsTree").each(function (index, element) {
if ($(element).data("isprocessed") != "1" && $(element).attr("isprocessed") != 1) {
$(element).data("isprocessed", "1");
$(element).attr("isprocessed", "1");
$(this).jstree({
core:
{
check_callback: true
},
checkbox:
{
keep_selected_style: true,
three_state: ($(element).data("three-state") == "false" ? false : true)
},
search:
{
case_insensitive: true,
show_only_matches: true
},
plugins: ["checkbox", "search", "changed"]
}).on('search.jstree', function (nodes, str, res) {
if (str.nodes.length === 0) {
$(element).jstree(true).hide_all();
}
});
}
});
另一个页面上的jsTree代码:
$(document).ready(function () {
$('#jsEvent').hide();
$('#jsRoleTree').jstree({
checkbox: {
multiple: false,
}
});
});
/* To select an event for event-related roles */
$('#jsRoleTree').on('changed.jstree', function (e, data) {
$('#jsEvent').hide(); //Hide event dropdown
var ref = $('#jsRoleTree').jstree(true);
var nodes = ref.get_checked(); // use method get_checked
$.each(nodes, function (i, nd) {
if (nd != data.id)
ref.disable_checkbox(nd);
});
//Show event dropdown
for (i = 0; i < data.selected.length; i++) {
var selectedNode = $(data.instance.get_node(data.selected[i]).text).text().trim();
if (selectedNode == '@Constant.EventAdmin' || selectedNode == '@Constant.EventContributor' || selectedNode == '@Constant.EventSubscriber') {
$('#jsEvent').show();
}
}
});
【问题讨论】: