所以我在<div id="navtree">
中构建了我的JStree,当选择一个节点时,我通过.ajax()方法将一些内容加载到页面上其他地方的另一个<div id="tabs">
中:
$("#navtree")
.jstree({
"core" : { "animation" : 0 },
"themes" : { "theme" : "classic", "dots" : true, "icons" : false },
"ui" : { "select_limit" : 1 },
"plugins" : [ "themes", "html_data", "ui" ]
})
.bind("select_node.jstree", function (event, data) {
data.inst.toggle_node(data.rslt.obj);
$("#main").css("display","none");
var identifier = $.trim(data.rslt.obj.children("a").text());
$.ajax({
data : {target : identifier},
type : "POST",
url : data.rslt.obj.children("a").attr("href"),
success : function(response) {
$("#tabs").html(response);
$("#tabs").tabs();
$("#main").css("display","inline");
}
});
$("#searchinput").val("") .focus();
return false;
});
这一切都很好用。
这个新加载的内容中包含一些<a class="searchlink">
标签,单击这些标签时,我想以编程方式选择我的 jstree 中的一个节点。
使用 .on() 方法,我可以在单击这些<a class="searchlink">
标签时触发警报:
$("body").on("click", "a.searchlink", function(event) {
event.preventDefault();
var $nodeid = "#" + $(this).text().replace(/./g, "_");
alert($nodeid);
$("#navtree").jstree("select_node", $nodeid);
//$(nodeid).trigger("select_node.jstree");
});
因为 .on() 传播到添加到页面的所有未来元素,所以 alert() 向我显示了我要选择的节点的正确 id。
但是,无论我如何尝试这样做(并且我已经尝试了我能想到的一切),我都无法让它在现有 jstree 中的节点上触发"select_node"事件,我怀疑这与这些<a class="searchlink">
标签在 jstree 实例化很久后通过 .ajax() 调用添加到页面的事实有关。
新信息:
Firefox Web 开发人员控制台每次单击通过 .ajax() 加载的<a class="searchlink">
时都会向我显示错误"$("#navtree").jstree 不是一个函数"。
前,当我尝试在单击树上的节点时在同一屏幕上填充div时,我遇到了类似的错误"$("#sometree").jstree不是一个函数。事实证明,加载到div 上的页面再次加载 jquery,这导致了这个奇怪的问题。检查您通过 ajax 加载的内容是否有再次加载 jquery 的指令。