在另一个div中加载.ajax后,我无法在我的JStree中选择节点



所以我在<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 的指令。

最新更新