如何在重新填充后触发 jsTree 的 select 节点事件
How to fire a select node event of a jsTree after re-populting it
我需要填充我的 jsTree 并触发一些 ajax 调用来选择我能够做到的 jsTree 的任何节点。但问题是我必须重新填充同一棵树并再次触发 ajax 调用。重新填充后,我无法在选择任何树节点时触发 SELECT 或 CLICK NODE 事件。下面是代码。
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script type="text/javascript"
src="//static.jstree.com/3.2.1/assets/dist/jstree.min.js"></script>
<link rel="stylesheet"
href="//static.jstree.com/3.2.1/assets/dist/themes/default/style.min.css" />
<script>
$(document).ready(function(){
$("#tree").on("select_node.jstree", function(event, node) {
$("#para").text("");
var selected = node.instance.get_selected();
if(selected.length === 1) {
$("#para").text(selected[0]); // Here goes my ajax call.
} else if(selected.length > 1) {
alert("hi");
}
});
});
function getData(){
$('#tree').jstree("destroy").empty();
$('#tree').jstree({
'core' : {
'data' : [
{ "id" : "ajson1", "parent" : "#", "text" : "Root node1" },
{ "id" : "ajson2", "parent" : "#", "text" : "Root node 2" },
{ "id" : "ajson3", "parent" : "ajson2", "text" : "Child 1" },
{ "id" : "ajson4", "parent" : "ajson2", "text" : "Child 2" },
]
}
});
}
</script>
</head>
<body>
<a id="go" href="#" onclick="getData()">Get Tree</a><br><br><br><br>
<div id="tree"></div>
<p id="para"></p>
</body>
</html>
您可以直接将此代码粘贴到 w3school 站点并进行测试。无法制作它的 jsFiddle。
您可以通过以下代码行以编程方式 select 节点。
$('#treeSelector').jstree().select_node('node_id');
它也会触发 select_node & 改变事件。
创建一个单独的函数来添加事件侦听器.. 然后从 Doc ready 以及 getData() 的末尾调用该函数。喜欢
$(document).ready(function(){
function addEventListener(){
$("#tree").on("select_node.jstree", function(event, node) {
$("#para").text("");
var selected = node.instance.get_selected();
if(selected.length === 1) {
$("#para").text(selected[0]); // Here goes my ajax call.
} else if(selected.length > 1) {
alert("hi");
}
});
}
addEventListener();
function getData(){
$('#tree').jstree("destroy").empty();
$('#tree').jstree({
'core' : {
'data' : [
{ "id" : "ajson1", "parent" : "#", "text" : "Root node1" },
{ "id" : "ajson2", "parent" : "#", "text" : "Root node 2" },
{ "id" : "ajson3", "parent" : "ajson2", "text" : "Child 1" },
{ "id" : "ajson4", "parent" : "ajson2", "text" : "Child 2" },
]
}
});
addEventListener();
}
})
我需要填充我的 jsTree 并触发一些 ajax 调用来选择我能够做到的 jsTree 的任何节点。但问题是我必须重新填充同一棵树并再次触发 ajax 调用。重新填充后,我无法在选择任何树节点时触发 SELECT 或 CLICK NODE 事件。下面是代码。
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script type="text/javascript"
src="//static.jstree.com/3.2.1/assets/dist/jstree.min.js"></script>
<link rel="stylesheet"
href="//static.jstree.com/3.2.1/assets/dist/themes/default/style.min.css" />
<script>
$(document).ready(function(){
$("#tree").on("select_node.jstree", function(event, node) {
$("#para").text("");
var selected = node.instance.get_selected();
if(selected.length === 1) {
$("#para").text(selected[0]); // Here goes my ajax call.
} else if(selected.length > 1) {
alert("hi");
}
});
});
function getData(){
$('#tree').jstree("destroy").empty();
$('#tree').jstree({
'core' : {
'data' : [
{ "id" : "ajson1", "parent" : "#", "text" : "Root node1" },
{ "id" : "ajson2", "parent" : "#", "text" : "Root node 2" },
{ "id" : "ajson3", "parent" : "ajson2", "text" : "Child 1" },
{ "id" : "ajson4", "parent" : "ajson2", "text" : "Child 2" },
]
}
});
}
</script>
</head>
<body>
<a id="go" href="#" onclick="getData()">Get Tree</a><br><br><br><br>
<div id="tree"></div>
<p id="para"></p>
</body>
</html>
您可以直接将此代码粘贴到 w3school 站点并进行测试。无法制作它的 jsFiddle。
您可以通过以下代码行以编程方式 select 节点。
$('#treeSelector').jstree().select_node('node_id');
它也会触发 select_node & 改变事件。
创建一个单独的函数来添加事件侦听器.. 然后从 Doc ready 以及 getData() 的末尾调用该函数。喜欢
$(document).ready(function(){
function addEventListener(){
$("#tree").on("select_node.jstree", function(event, node) {
$("#para").text("");
var selected = node.instance.get_selected();
if(selected.length === 1) {
$("#para").text(selected[0]); // Here goes my ajax call.
} else if(selected.length > 1) {
alert("hi");
}
});
}
addEventListener();
function getData(){
$('#tree').jstree("destroy").empty();
$('#tree').jstree({
'core' : {
'data' : [
{ "id" : "ajson1", "parent" : "#", "text" : "Root node1" },
{ "id" : "ajson2", "parent" : "#", "text" : "Root node 2" },
{ "id" : "ajson3", "parent" : "ajson2", "text" : "Child 1" },
{ "id" : "ajson4", "parent" : "ajson2", "text" : "Child 2" },
]
}
});
addEventListener();
}
})