Originariamente inviato da simo_JQ

ci riuscirei, credo, se non fosse che non conosco un comando per "SELEZIONARE" in automatico in checkbox...
Ho guardato nelle API di Jquery e non trovo nulla. Se sai come si fa a fare questo, ti posso fare una funzione che fa al caso tuo.
Grazie mille per la risposta.
Proprio ora sono riuscito a risolvere il problema. Probabilmente ci sarà qualcosa di più semplice, ma mi accontento di questo.
codice:
function search_child(parent_id,azione){
for(var i=0; i<document.form_lista.elements.length; i++){
elem_chk = document.form_lista.elements[i];
val_sel = elem_chk.getAttribute('parentid');
id_elem = elem_chk.getAttribute('id');
// se elemento è figlio del valore passato
if (val_sel==parent_id){
document.getElementById(id_elem).checked = azione;
search_child(id_elem,azione);
}
}
}
// funzione che mi permette di cercare se ci sono nodi figli attivi per il nodo passato
function search_child_active(parent_id){
for(var i=0; i<document.form_lista.elements.length; i++){
elem_chk = document.form_lista.elements[i];
val_sel = elem_chk.getAttribute('parentid');
id_elem = elem_chk.getAttribute('id');
// se elemento è figlio del valore passato
if (val_sel==parent_id){
if(document.getElementById(id_elem).checked == true){
return true;
}
}
}
return false;
}
function search_parent(val,check){
// prendo il nodo padre del nodo chiamante
parent_id = document.getElementById(val).getAttribute('parentid');
if (check==true){
// se sto abilitando il nodo allora abilito anche il padre
document.getElementById(val).checked = check;
if (parent_id>0){
search_parent(parent_id,check);
}
}else{
// se sto disabilitando il nodo allora
// cerco i figli per questo nodo e se non li trova
// lo disabilito.
if (parent_id>0){
active_ch = search_child_active(parent_id);
if (active_ch==false){
document.getElementById(parent_id).checked = false;
}
// cerco ricorsivamente il padre del nodo
search_parent(parent_id,check);
}
}
}
function sel_ckeck(val){
// se il nodo che chiama ha figli allora applico la stessa azione
valore_id = val.id
chk_sel = val.checked;
search_child(valore_id,chk_sel);
// se il nodo che chiama ha un nodo padre
parent_id = val.getAttribute('parentid');
if (parent_id>0){
if (chk_sel==true){
// se sto mettendo il check al nodo chiamante abilito anche il padre e faccio la ricorsione
// per abilitare tutti i parent del nodo.
search_parent(parent_id,chk_sel);
}else{
// se è false verifico se il padre ha altri figli abilitati
child_active = search_child_active(parent_id);
// se non ne ha disabilito il padre
if(child_active==false){
document.getElementById(parent_id).checked = false;
// cerco ricorsivamente gli altri parent e applico lo stesso controllo
search_parent(parent_id,chk_sel);
}
// se li ha allora non faccio nulla
}
}
}
<ul>
[*]
<input parentid="null" type="checkbox" value="1" name="accessi[]" id="1" onclick='sel_ckeck(this);'>VALORE 1
<ul>
[*]
<input parentid="1" type="checkbox" value="2" name="accessi[]" id="2" onclick='sel_ckeck(this);'>VALORE 1.1
[*]
<input parentid="1" type="checkbox" value="3" name="accessi[]" id="3" onclick='sel_ckeck(this);'>VALORE 1.2
[*]
<input parentid="1" type="checkbox" value="4" name="accessi[]" id="4" onclick='sel_ckeck(this);'>VALORE 1.3
<ul>
[*]
<input parentid="4" type="checkbox" value="5" name="accessi[]" id="5" onclick='sel_ckeck(this);'>VALORE 1.3.1
[/list]
[/list]
[*]
<input type="checkbox" parentid="null" value="6" name="accessi[]" id="6">VALORE 2
[/list]