Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    JQUERY - selezionare tutti i checkbox di un nodo

    Ciao
    Il problema è il seguente: ho un albero le cui voci sono delle checkbox.
    Cliccando su una di esse voglio che si selezioni quella voce e tutte le sotto-voci di quel nodo.
    La struttura dell'albero è la seguente:
    codice:
    <ul>
    	[*]<input type="checkbox" /><label>Voce 1</label>
        	<ul>
            	[*]<input type="checkbox" /><label>Sottovoce 1</label>[*]<input type="checkbox" /><label>Sottovoce 2</label>
                	<ul>
                    	[*]<input type="checkbox" /><label>Oggetto 1</label>[*]<input type="checkbox" /><label>Oggetto 2</label>[/list]
                [/list]
        [*]<input type="checkbox" /><label>Voce 2</label>
        	<ul>
            	[*]<input type="checkbox" /><label>Sottovoce 1.b</label>[*]<input type="checkbox" /><label>Sottovoce 2.b</label>[/list]
        [/list]
    Se io clicco, per esempio, su Voce2, devo selezionare anche Sottovoce 1.b e Sottovoce 2.b.

    Il mio script comincerebbe così:
    codice:
    $(function() {
    	$(':checkbox').each(function(){
    		$(this).click(function(){
    			$('this').parent('li').children().attr('checked','checked');
    		});
    	});
    });
    Se non ho scritto male vorrei che si comportasse in qesto modo:
    - trova il padre della checkbox cliccata (che è un[*]),
    - trova tutti i figli (che sono ancora[*])
    - selezionali tutti.

    NON FUNZIONA!

    Una mano è graditissima!
    Dice il saggio:
    Non ci sono domande difficili, esistono solo risposte che non conosciamo!
    "Se qualcosa può andare male, lo farà" - Murphy

  2. #2
    Utente di HTML.it L'avatar di Ranma2
    Registrato dal
    Mar 2003
    Messaggi
    2,648
    $('this').parent('li').children().attr('checked',t rue);

  3. #3
    Ottima idea... ma non funziona.

    Ho usato un debugger di Firefox (Firebug, non so se lo conosci) per vedere un po' di cosine...
    la cosa strana è che il comando $('this').parent('li') mi punta alla pagina html e non al nodo[*] precedente...
    Dice il saggio:
    Non ci sono domande difficili, esistono solo risposte che non conosciamo!
    "Se qualcosa può andare male, lo farà" - Murphy

  4. #4
    Utente di HTML.it L'avatar di Ranma2
    Registrato dal
    Mar 2003
    Messaggi
    2,648
    se devi selezionare le sottovoci, non devi salire, devi solo scendere, a quel punto fai

    codice:
    $(function() {
    		$(this).click(function(){
    			$(this).children('input').attr('checked',true);
    		});
    });
    l'each non serve, selezionerà già tutto, e il this non va trattato come stringa

  5. #5
    La tua soluzione parrebbe meglio della mia (quanto meno il codice è più snello e leggibile).

    Io per ora ho risolto così:

    codice:
    $(function() {
    	$(':checkbox').each(function() {
    		$(this).click(function(){
    			$figlio = $(this).parent('li').children('ul'); /* seleziono il sottomenu */
    			$voci = $figlio.children(); /* seleziono le voci del sottomenu */
    			if($(this).is(':checked')){
    				$voci.each(function(){
    					$(this).children('input').attr('checked','checked'); 
    				});
    			}
    			else {
    				$voci.each(function(){
    					$(this).children('input').attr('checked',''); 
    				});
    			}
    			
    		});
    	});
    	
    });
    Adesso mi mancherebbe solo di capire come selezionare tutti i checkbox selezionando il nodo radice dell'albero. Per adesso infatti riesco a selezionare solo i primi livelli di ogni nodo.

    Intanto vedo se riesco a modellare la tua soluzione sul mio codice.
    Dice il saggio:
    Non ci sono domande difficili, esistono solo risposte che non conosciamo!
    "Se qualcosa può andare male, lo farà" - Murphy

  6. #6
    Purtroppo il tuo codice non tiene conto di un fatto... o forse sono io che non ho capito dove metterlo.

    Il click() avviene su una checkbox, la quale non ha figli. Per questo io devo prendere il parent() della checkbox (LI), trovarne il figlio (UL) e di questo trovare i figli (LI). Poi trattare tali figli in maniera opportuna.

    È una cosa complicata... forse troppo, ma la struttura che mi serve è fatta con una unordered list e non posso cambiarla.

    Non ho capito esattamente la faccenda dell'each che non serve (sono principiante... perdonami).
    Del 'this' tra virgolette invece me n'ero accorto

    Mi metto a studiare un modo per selezionare tutte le sottovoci della radice. Se ti viene un'idea...
    Dice il saggio:
    Non ci sono domande difficili, esistono solo risposte che non conosciamo!
    "Se qualcosa può andare male, lo farà" - Murphy

  7. #7
    Per selezionare tutti i vari input prova
    questo

    Codice PHP:
    $(document).ready(function(){
        $(
    "ul input:checkbox").click(function(){
                   $(
    this).parent('li').find('ul').children('li').children('input').attr("checked",true);
        }); 
    }); 
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  8. #8
    wisher... sei un mostro!! Nel senso buono eh!!

    Hai riassunto in una sola riga di codice tutto il mio lavoro della mattinata, ciò significa due cose:
    1) sei un mostro con jQuery
    2) io sono una pippa

    Molte grazie. Adesso aggiusto il codice per l'effetto contrario (ossia, deselezionare tutto quando ri-clicco).

    Ciao ciao,
    se mi servi ancora spero di poter contare su di te!
    Dice il saggio:
    Non ci sono domande difficili, esistono solo risposte che non conosciamo!
    "Se qualcosa può andare male, lo farà" - Murphy

  9. #9
    Originariamente inviato da cleverboy
    wisher... sei un mostro!! Nel senso buono eh!!

    Hai riassunto in una sola riga di codice tutto il mio lavoro della mattinata, ciò significa due cose:
    1) sei un mostro con jQuery
    2) io sono una pippa

    Molte grazie. Adesso aggiusto il codice per l'effetto contrario (ossia, deselezionare tutto quando ri-clicco).

    Ciao ciao,
    se mi servi ancora spero di poter contare su di te!
    Grazie ma forse non hai mai visto
    i veri mostri e guri


    Guarda il codice di prima ho tolto un find('li')
    e sostituito con children('li')



    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

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.