2011-01-28 18 views
12

Sono totalmente nuovo a jQuery e jstree. Sto usando jstree e popolando i dati usando xml. Ma vorrebbe catturare l'evento per ciascun nodo, che sia selezionato o meno insieme ai loro ID. Ho provato a utilizzare l'API plugin di jstree come change_state(), check_node() o select_node() ma non funziona. Vorrei anche ottenere tutti i dati dei nodi selezionati in un array per un'ulteriore elaborazione .. Qualcuno può aiutarmi?Jquery Jstree checkbox capture capture

Grazie ...

+0

quale plugin di jstree stai usando? – Vivek

+0

@Vivek probabilmente jquery.jstree. @ user529011 Puoi dare un esempio del codice che stai usando. Forse isolare il problema su http://www.jsfiddle.net – Raynos

+0

jquery jstree v.1.0-versione – user529011

risposta

3

la versione corrente di jstree sembra avere un problema con il legame del check_node.jstree. Anche il collegamento select_node.jstree non viene attivato con il plug-in della casella di controllo attivo con la versione corrente.

Dirigiti verso HERE dove puoi chiedere alle domande del creatore o persino visualizzare le domande già poste.

Per quanto riguarda $.jstree._reference("#demo").get_selected(); è possibile ottenere l'ID di ogni elemento utilizzando $.jstree._reference("#demo").get_selected().each(function(index,element){alert($(element).attr("id"));});

+1

Solo una breve nota - la nuova versione di jstree usa "riferimento" "(nessun segno di sottolineatura principale). –

22

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.

+0

salvato il mio giorno ... –

+0

Che senso ha scrivere un plug-in di casella di controllo per un albero di dati senza un'evidente API di eventi ?! Sembra un po 'di supervisione! – rgvcorley

+1

Riprendo quello - gli eventi 'check_node.jstree' e' uncheck_node.jstree' sono attivati, semplicemente non è nella documentazione di jstree. – rgvcorley