Visualizzazione dei risultati da 1 a 4 su 4

Discussione: checkbox tree

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    310

    checkbox tree

    Ciao a tutti,
    ho un problema, non riesco a creare una funzione che mi fa il check (uncheck) dei checkbox di una struttura ad albero.

    la struttura è la seguente

    codice:
    <ul>
    	[*] 
    		<input type="checkbox" value="1" name="accessi[]" id="1">VALORE 1
    		<ul>
    			[*]
    				<input type="checkbox" value="2" name="accessi[]" id="2">VALORE 1.1
    			
    			[*] 
    				<input type="checkbox" value="3" name="accessi[]" id="3">VALORE 1.2
    			
    			[*]
    				<input type="checkbox" value="4" name="accessi[]" id="4">VALORE 1.3
    				<ul>
    					[*] 
    						<input type="checkbox" value="5" name="accessi[]" id="5">VALORE 1.3.1
    					
    				[/list]
    			
    		[/list]
    	
    	[*]
    		<input type="checkbox" value="6" name="accessi[]" id="6">VALORE 2
    	[/list]
    Se seleziono il VALORE 1.3.1 si dovrebbero selezionare automanticamente VALORE 1.3 e VALORE 1

    SE DESELEZIONO il VALORE 1.3.1 si dovrebbe deselezionare il VALORE 1.3 e se il VALORE 1 non ha altri figli selezionati si dovrebbe DESELEZIONARE.

    In rete non sono riuscito a trovare uno script adatto alle mie esigenze.
    Mi potete dare una mano?

    Grazie mille.

  2. #2
    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.

  3. #3

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    310
    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]

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.