2011-01-28 67 views
12

我完全不熟悉jQuery和jstree。我正在使用jstree並使用xml填充數據。但是想要捕獲每個節點的事件,無論是否與他們的ID一起檢查。我嘗試使用jstree的插件API,如change_state(),check_node()select_node(),但它不起作用。此外,我想獲得一個數組中的所有選定的節點數據作進一步處理..任何人都可以幫忙嗎?Jquery Jstree複選框事件捕獲

謝謝...

+0

您正在使用哪個jstree插件? – Vivek 2011-01-28 12:13:10

+0

@Vivek可能jquery.jstree。 @ user529011你可以舉一個你使用的代碼的例子嗎?也許隔離你的問題在http://www.jsfiddle.net – Raynos 2011-01-28 12:28:11

+0

jquery jstree v.1.0-版本 – user529011 2011-01-28 12:37:20

回答

3

當前版本jstree似乎已經與check_node.jstree結合的問題。 此外,select_node.jstree綁定不會在當前發行版激活複選框插件時觸發。

轉到HERE,您可以在其中詢問創建者的問題,甚至查看已提問的問題。

至於$.jstree._reference("#demo").get_selected();您可以通過使用$.jstree._reference("#demo").get_selected().each(function(index,element){alert($(element).attr("id"));});

22

我喜歡jstree插件獲得每個項目的ID,但它不是有據可查的,也不是建立符合說,插件開發的jQuery UI的標準。我已經使用1.0rc2來完成你想要做的事情。

在實例化jstree之前,你必須綁定「loaded」事件,所以我猜它和「change_state」事件是一樣的。另外要注意的是,「change_state」不僅僅是一個複選框的變化。例如,當你展開一個節點時它也會被觸發(但由於某種原因,不會崩潰)。也就是說,我在「change_state」處理程序中做了一些kludgey檢查,試圖從checkbox變更中濾除不需要的事件。竊聽處理程序的最小碼爲

$("#treeElement").bind("change_state.jstree", function (e, d) { 
    var tagName = d.args[0].tagName; 
    var refreshing = d.inst.data.core.refreshing; 
    if ((tagName == "A" || tagName == "INS") && 
     (refreshing != true && refreshing != "undefined")) { 
    //if a checkbox or it's text was clicked, 
    //and this is not due to a refresh or initial load, run this code . . . 
    } 
}); 

你點擊的元素是那麼d.rslt,你可以得到檢查的項目有d.inst.get_checked()只是元素點擊,或d.inst.get_checked(d.rslt)包含已籤子節點的對象。使用jquery的.each函數來處理節點。