2012-05-24 19 views
0

所以,我有我的JStree內置了<div id="navtree">的阿賈克斯負荷後選擇在我的JStree一個節點,當選擇一個節點我通過阿賈克斯()方法進入另一個加載一些內容<div id="tabs">頁面其他地方:我不能在另一個DIV

$("#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中選擇一個節點。

使用。對()方法,我可以觸發一個警報,當我點擊這些<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"); 
}); 

因爲。對()傳播到添加到頁面,警告未來所有元素()顯示我想要選擇的節點的正確ID。但是,無論我如何嘗試這樣做(我試過所有我能想到的),我無法讓它在現有jstree的節點上觸發「select_node」事件,而且我懷疑它是與事實,即這些<a class="searchlink">標籤被通過阿賈克斯添加到頁面的jstree被實例化()調用之後長。

最新資訊:

Firefox網頁開發者控制檯顯示我的錯誤「$(」#導航樹「)。jstree是不是一個函數」我每次點擊一個<a class="searchlink">時間經阿賈克斯加載()。

+0

如果警報工作,受委託的綁定功能工作。換句話說,它不是由Ajax添加的「a.searchlink」。只留下$ nodeid聲明或'.jstree'行。 –

+0

是的,這也正是爲什麼我認爲也許是阿賈克斯()調用以某種方式改變了我的範圍或命名空間或東西,例如我的jstree不再是可選的。 .jstree語法應該是正確的,因爲我已經使用與jstree相同的div的元素對其進行了測試,並且未通過.ajax()加載,並且其行爲與預期相同。事實上,我想要做的和[Core文檔頁面上的第一個演示](http://www.jstree.com/documentation/core#demos)之間唯一的真正區別是.ajax()調用。 – user1415730

+0

要知道,你的名爲「$ NODEID」變量是一個字符串,而不是一個jQuery對象...的註釋行$(NODEID),因爲變量名是$ NODEID,不NODEID會失敗......我提到這一點,因爲變量如果你認爲它是一個jQuery對象,命名是令人困惑的。 –

回答

1

我得到一個類似的錯誤「$(」#sometree「)。jstree不是一個函數」了一段時間後,當我試圖填充在同一屏幕上一個div上的樹節點的點擊。原來,加載到div的頁面再次加載jquery,這導致了這個奇怪的問題。檢查通過ajax加載的內容是否有指令再次加載jquery。