Mi piace il plugin jstree ma non è ben documentato, né è costruito per conformarsi a dire, gli standard jQuery UI di sviluppo plugin. Ho usato 1.0rc2 per realizzare ciò che stai cercando di fare.
È necessario associare l'evento "caricato" prima di istanziare il jstree, quindi suppongo che sia lo stesso con l'evento "change_state". L'altra cosa a cui prestare attenzione è che "change_state" è più di una semplice modifica a causa di una casella di controllo. Ad esempio, sparerà anche quando espandi un nodo (ma non collassi, per qualche motivo). Detto questo, eseguo alcuni controlli scrupolosi nel gestore "change_state" per cercare di filtrare gli eventi indesiderati dalla modifica della casella di controllo. Il codice minimo per toccando il gestore è
$("#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 . . .
}
});
tuo elemento cliccato è allora d.rslt
e si può ottenere elementi controllati con d.inst.get_checked()
solo per l'elemento cliccato, o d.inst.get_checked(d.rslt)
per un oggetto che contiene i sotto nodi che vengono controllati. Usa la funzione .each di jquery per elaborare i nodi.
quale plugin di jstree stai usando? – Vivek
@Vivek probabilmente jquery.jstree. @ user529011 Puoi dare un esempio del codice che stai usando. Forse isolare il problema su http://www.jsfiddle.net – Raynos
jquery jstree v.1.0-versione – user529011