所以我在<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()调用添加到页面中的。
新信息:
每次点击通过.jstree()加载的<a class="searchlink">时,Firefox web开发人员控制台都会显示错误消息“$(”#navtree“).ajax is not a function”。
发布于 2013-06-11 01:43:50
我得到了一个类似的错误"$("#sometree").jstree不是一个函数“,一段时间以前,当我试图在同一屏幕上填充一个div时,点击树上的一个节点。原来加载到div上的页面再次加载了jquery,这导致了这个奇怪的问题。检查通过ajax加载的内容是否包含再次加载jquery的指令。
https://stackoverflow.com/questions/10743980
复制相似问题