0

所以我有我的 JStree 内置<div id="navtree">,当一个节点被选中时,我通过 .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() 调用添加到页面中的。

新信息:

每次单击<a class="searchlink">通过 .ajax() 加载的内容时,Firefox Web 开发人员控制台都会向我显示错误“$("#navtree").jstree 不是函数”。

4

1 回答 1

1

不久前,当我试图通过单击树上的节点在同一屏幕上填充 div 时,我收到了类似的错误“$("#sometree").jstree is not a function”。原来加载到 div 上的页面再次加载 jquery,这导致了这个奇怪的问题。检查您通过 ajax 加载的内容是否有再次加载 jquery 的指令。

于 2013-06-10T17:43:49.567 回答