2013-02-13 18 views
11

In primo luogo, volevo solo dire che sono senza speranza con jQuery.jQuery selezionare tutte le caselle di controllo figlio

stavo guardando un po 'di codice da un post su qui che seleziona ogni casella di controllo genitori (e lavora):

$(function() { 
    $(":checkbox").change(function() { 
    $(this).parents().children(':checkbox').attr('checked', this.checked); 
    }); 
}); 

abbiamo una struttura ad albero con <ul> <li> e ciascuno <li> ha una casella di controllo. Voglio fare l'opposto di quanto sopra ed eseguire la stessa selezione di caselle di controllo su tutte le caselle di controllo figlio.

Qualcuno può modificare quanto sopra per farlo?

Solo per notare che stiamo usando il rasoio e ogni casella è un @ Html.CheckboxFor quindi l'uscita è sulla falsariga di:

<input name="Survey.Buildings[0].IsSelected" type="checkbox" value="true" checked="checked" data-val="true" data-val-required="The Selected? field is required." id="Survey_Buildings_0__IsSelected" /> 
<input name="Survey.Buildings[0].IsSelected" type="hidden" value="false" /> 
  • EDIT 2:

OK Ho fissa il codice HTML e la struttura ora assomiglia a:

<ul> 
    <li> Cbx1 
     <ul> 
      <li> Cbx 2 </li> 
     </ul> 
    </li> 
    <li> Cbx3 </li> 
    <li> Cbx4 
     <ul> 
      <li> Cbx 5 </li> 
      <li> Cbx 6 </li> 
     </ul> 
    </li> 
</ul> 

Quindi, se Cbx4 è stato controllato un Cbx5 ND 6 sarebbero controllati, e se è stato deselezionata Sarebbero incontrollato

Molto apprezzato

Andy

+0

Si dovrà fornire alcune specifiche frammento di codice HTML, e descrivere esattamente quali scatole devono essere controllati quando un alcuni cambiamenti box. – nbrooks

+0

Aggiornato il mio post –

+0

se Cbx2 è spuntato non accadrà nulla, desidero attivare o disattivare le caselle secondarie. Quindi cbx1 commuterebbe cbx2 non viceversa e cbx4 commuterebbe cbx5 e 6. –

risposta

27

jsFiddle Demo

$(function() { 
    $("input[type='checkbox']").change(function() { 
    $(this).siblings('ul') 
      .find("input[type='checkbox']") 
      .prop('checked', this.checked); 
    }); 
}); 
+0

Il problema è che nell'esempio jsfiddle quando 3 è selezionato, 4 è selezionato e non è un figlio di 3. Quindi nell'esempio sul mio post quando Cbx3 è selezionato, nessun altro sarebbe interessato in quanto non ha figli LI –

+0

Vedo che sì, 5 e 6 dovrebbero esistere nello stesso LI che è quello che potrebbe essere il mio problema, correggerò il mio HTML, e il tuo esempio funzionerebbe? –

+0

Ho aggiornato il mio post per riflettere come appare ora l'HTML. Come puoi vedere, CBx5 e CBX6 sono ora una lista di bambini all'interno dell'elenco CBX4. Ha senso? –

0
$(function() { 
    $(":checkbox").change(function() { 
    $(this).children(':checkbox').attr('checked', this.checked); 
    }); 
}); 

Non proprio chiaro con la tua domanda, ma si può provare di nuovo, eliminando il genitore() come mostrato sopra.

Problemi correlati