2013-03-18 13 views
11

Ho creato uno script per controllare le caselle di controllo master & slave (controllo e deselezione automatici).Seleziona e deseleziona la casella di controllo Dinamicamente con jQuery: bug?

Ecco il mio JS:

$(document).ready(function() { 

    $('#myCheck').click(function() { 
     $('.myCheck').attr('checked', false); 
    }); 
    $('.myCheck').click(function() { 
     if ($('.myCheck').is(':checked')) { 
      $('#myCheck').attr('checked', false); 
     } else { 
      $('#myCheck').attr('checked', true); // IT DOESN'T WORK, WHY ? 
      alert("Checkbox Master must be checked, but it's not!"); 
     } 
    }); 

}); 

Ed ecco il mio HTML:

<input type="checkbox" id="myCheck" checked="checked" />&nbsp;&nbsp;Checkbox Master<br /> 
<input type="checkbox" class="myCheck" value="1" />&nbsp;&nbsp;Checkbox Slave 1<br /> 
<input type="checkbox" class="myCheck" value="1" />&nbsp;&nbsp;Checkbox Slave 2 

Guardate il mio semplice JsFiddle per capire il problema.

MODIFICA 1: Come Inser ha detto, il problema si verifica con jQuery 1.9.2 e oltre. Nessun problema con jQuery 1.8.3. Strano ...

EDIT 2: Inser trovato la soluzione, utilizzare .prop ('controllato', true) invece .attr ('controllato', true). Guarda i commenti qui sotto ...

+2

Qual è la domanda? –

+0

'Guardando il tuo semplice JsFiddle per capire il problema! Ma myaaan !! non riesco a capire cosa stai cercando di fare ... quindi quello che vuoi acutamente – bipen

+0

Ok, scusa ragazzi, pensavo che il mio codice fosse chiaro ... Infatti, una volta cliccato sul Master Checkbox, tutti i Checkbox Slave devono essere deselezionati: funziona bene. D'altra parte, una volta deselezionata la casella Checkbox Slave e nessun altro Checkbox Slave selezionato, CheckBox Master deve essere controllato automaticamente. Ci scusiamo per questo, spero che capirai il mio problema ora ... –

risposta

35

Utilizzare il metodo puntello per le nuove versioni di jQuery:

$('#myCheck').prop('checked', true); 
$('#myCheck').prop('checked', false); 

http://jsfiddle.net/uQfMs/37/

+0

Grazie mille Inser, questa è la soluzione, hai salvato il mio giorno (e notte)! Molto bene! ;-) –

+0

davvero bello, stavo diventando pazzo con l'ultimo jquery 1.11, grazie! – xtrm

+0

questo non sembra funzionare in jquery versione 2 + ... o sono solo io? –

0

forse volete solo per controllare la casella di controllo maestro:

$('#myCheck').click(function() { 
     $('.myCheck').attr('checked', false); 
     $(this).attr('checked', true); 
}); 

vedono questo fiddle.

3

Si potrebbe provare questo.

$('#myCheck').click(function() { 
    var checkBoxes = $(this).siblings('input[type=checkbox]'); 
    checkBoxes.prop('checked', $(this).is(':checked') ? true : false); 
}); 
+0

questa è bellissima – baik

+0

Grazie! Contento che ti piaccia. –

+0

L'operatore ternario è ridondante. '$ (this) .is (': checked')? true: false' restituirà sempre lo stesso valore booleano di $ (questo).è (': controllata') '. –

0

ho fatto alcune esperienze, in realtà $(':checkbox').attr('checked',false); ma decorate potrebbe impostare "controllato" attributo, ma non si dimostra continuesly in visiva. e $(':checkbox').prop('checked', true); questo funziona perfettamente! spero che questo possa aiutare.

0

ti ho scritto un plugin per questo:

$.fn.dependantCheckbox = function() { 
    var $targ = $(this); 
    function syncSelection(group, action) { 
    $targ.each(function() { 
     if ($(this).data('checkbox-group') === group) { 
     $(this).prop('checked', action); 
     } 
    }); 
    }; 
    $('input[type="checkbox"][data-checkbox-group]').on('change', function() { 
    var groupSelection = $(this).data('checkbox-group'); 
    var isChecked = $(this).prop('checked'); 
    syncSelection(groupSelection, isChecked); 
    }); 
} 
$('input[type="checkbox"][data-checkbox-group]').dependantCheckbox(); 


<input data-checkbox-group="1" type="checkbox" id="test" /> 
<label for="test">test</label> 
<input data-checkbox-group="1" type="checkbox" id="test2" /> 
<label for="test2">test2</label> 
<input data-checkbox-group="2" type="checkbox" id="test3" /> 
<label for="test3">test3</label> 
<input data-checkbox-group="2" type="checkbox" id="test4" /> 
<label for="test4">test4</label> 

http://codepen.io/nicholasabrams/pen/mJqyqG

+0

plug-in davvero bello. Volevo solo sapere se una casella di input fa parte di più di un gruppo, quindi come può essere gestita come da questo plugin? –

Problemi correlati