したがって、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">
Firefox Web開発者コンソールでは、 .ajax()を介してロードさ れたをクリックするたびに、「$( "#navtree")。jstreeは関数ではありません」というエラーが表示されます。