我对 JSTree 和 Ajax 有一个奇怪的问题。
我通过 Ajax/PHP 请求生成我的树,该请求使用...生成 HTML(带有 UL、LI、A 标签)
$.ajax({
url: 'ajaxTreeView.php?method=edit&partid='+partId,
cache: false,
success: function(tree)
{
$('#treeViewer').html(tree);
}});
并使用...激活代码上的 JStree
options =
{
"core": { animation: 120 },
"themes": { theme: 'corral', dots: true },
"types":
{
"types":
{
"parent": { "icon": { "image": "images/custom/Legend/node_select.png" } },
"child": { "icon": { "image": "images/custom/Legend/node_select_child.png" } },
"current": { "icon": { "image": "images/custom/Legend/node.png" } }
}
},
"plugins": [ "html_data", "types", "themes", "ui", "contextmenu", "cookies" ],
"ui": { "select_limit" : 1 },
"cookies": { "save_selected" : false }
};
$("#tree").jstree(options);
我似乎无法轻松选择节点。我尝试了initial_select,但这似乎不起作用,也不理想,因为我经常想以编程方式选择节点。
我尝试使用...
$('#tree').jstree("select_node", '#ref565', true);
如果我通过超链接调用该函数,则此方法有效,但如果我在初始化 JStree 后调用它,则此方法无效。
我从添加警报中看到(所有这些都发生在 Ajax Success 例程中)......
$('#treeViewer').html(tree);
$("#tree").jstree(options);
alert('test');
$('#tree').jstree("select_node", '#ref565', true);
...在警报开始之前树尚未呈现。
我添加了一个 setTimeOut ...
$('#treeViewer').html(tree);
$("#tree").jstree(options);
setTimeout(function() {selectNode(565);},1250);
$('#tree').jstree("select_node", '#ref565', true);
...这行得通。
我显然是愚蠢的。我使用了错误的语法吗?为什么我必须设置延迟才能选择节点?
请帮忙。