Come deselezionare la casella di controllo utilizzando la libreria uniforme di jQuery


144

Ho un problema con deselezionando a checkbox. Dai un'occhiata al mio jsFiddle , dove sto provando:

   $("#check2").attr("checked", true);

Uso l' uniforme per lo styling di checkboxe semplicemente non funziona per selezionare / deselezionare il checkbox.

Qualche idea?


sia in Google Chrome che Firefox non funziona per me
Upvote

Risposte:


108

Guardando i loro documenti, hanno una $.uniform.updatefunzione per aggiornare un elemento "uniforme".

Esempio: http://jsfiddle.net/r87NH/4/

$("input:checkbox").uniform();

$("body").on("click", "#check1", function () {
    var two = $("#check2").attr("checked", this.checked);
    $.uniform.update(two);
});

5
@mkoryak: funziona perfettamente 1.4.4, ma i collegamenti ai file js e css sono stati interrotti. Ecco un violino aggiornato. Se intendi che avrà problemi specifici in 1.6, allora probabilmente è vero dal momento che jQuery ha cambiato il comportamento di .attr(). Utilizzando 1.6o superiore, dovresti davvero usare .prop().
user113716

Non vedo assolutamente alcuna differenza tra jsFiddle aggiornato e l'originale (fino all'etichetta errata della casella di controllo 2), tranne per il fatto che la versione aggiornata funziona per me e l'originale no!?!?
iPadDeveloper2011

A proposito, tutte queste forme uniformi disegnate a pixel sembrano molto poco sexy su Retina.
incarnato il

non ha funzionato per me anche jsfiddle non funziona o è confuso
matthy

367

Una soluzione più semplice è fare questo invece di usare l'uniforme:

$('#check1').prop('checked', true); // will check the checkbox with id check1
$('#check1').prop('checked', false); // will uncheck the checkbox with id check1

Ciò non attiverà alcuna azione di clic definita.

Puoi anche usare:

$('#check1').click(); // 

Questo attiva / disattiva il segno di spunta per la casella, ma attiverà anche qualsiasi azione clic definita. Perciò stai attento.

MODIFICA : jQuery 1.6+ prop()non utilizza il attr()valore selezionato per le caselle di controllo


2
Questo lascia l'attributo controllato così com'è in jQuery 1.7.1 per me. Funziona ma non fa quello che pensi che dovrebbe.
2

24
$("#chkBox").attr('checked', false); 

Questo ha funzionato per me, deselezionerà la casella di controllo. Allo stesso modo possiamo usare

$("#chkBox").attr('checked', true); 

per selezionare la casella.


4
Penso che sia meglio usare la funzione .prop () invece di .attr (). Altrimenti non funzionerà sempre come previsto ...
Simon Steinberger,

13

Se stai usando l' uniforme 1.5, usa questo semplice trucco per aggiungere o rimuovere l'attributo di check
Aggiungi semplicemente value = "check" nel campo di input della tua casella.
Aggiungere questo codice in uniform.js> function doCheckbox(elem){>.click(function(){

if ( $(elem+':checked').val() == 'check' ) {
    $(elem).attr('checked','checked');           
}
else {
    $(elem).removeAttr('checked');
}   

se non desideri aggiungere value = "check" nella casella di input perché in alcuni casi aggiungi due caselle di controllo, utilizza questa opzione

if ($(elem).is(':checked')) {
 $(elem).attr('checked','checked');
}    
else
{    
 $(elem).removeAttr('checked');
}

Se stai usando l' uniforme 2.0, usa questo semplice trucco per aggiungere o rimuovere l'attributo di check
in questo classUpdateChecked($tag, $el, options) {cambio di funzione

if ($el.prop) {
    // jQuery 1.6+
    $el.prop(c, isChecked);
}

Per

if ($el.prop) {
    // jQuery 1.6+
    $el.prop(c, isChecked);
    if (isChecked) {
        $el.attr(c, c);
    } else {
        $el.removeAttr(c);
    }

}

7
$('#check1').prop('checked', true).uniform(); 
$('#check1').prop('checked', false).uniform(); 

Questo ha funzionato per me.


Grazie mille. Posso confermare che questa è la soluzione più semplice.
Rudolph Opperman,

2

Basta fare questo:

$('#checkbox').prop('checked',true).uniform('refresh');

1

è necessario chiamare $.uniform.update()se si aggiorna l'elemento usando JavaScript come indicato nella documentazione.


1

Prima di tutto, checkedpuò avere un valore checkedo una stringa vuota.

$("input:checkbox").uniform();

$('#check1').live('click', function() {
    $('#check2').attr('checked', 'checked').uniform();
});

Non c'è niente di sbagliato nel passare un valore booleano come valore di checked.
user113716,

Ma non stiamo scrivendo markup HTML. Stiamo impostando una proprietà su HTMLInputElement. Dai un'occhiata alla checkedproprietà.
user113716,

Non importa ... Non capisco davvero perché non sia valido, neanche ...
nyuszika7h,

il passaggio di un valore booleano è supportato solo in 1.6+, prima di dover impostare l'attributo controllato su "controllato" o rimuoverlo.
mkoryak,

1

In alcuni casi è possibile utilizzare questo:

$('.myInput').get(0).checked = true

Per attivare / disattivare è possibile utilizzare se altro con la funzione


1

 $("#checkall").change(function () {
            var checked = $(this).is(':checked');
            if (checked) {
                $(".custom-checkbox").each(function () {
                    $(this).prop("checked", true).uniform();
                });
            } else {
                $(".custom-checkbox").each(function () {
                    $(this).prop("checked", false).uniform();
                });
            }
        });

        // Changing state of CheckAll custom-checkbox
        $(".custom-checkbox").click(function () {
            if ($(".custom-checkbox").length == $(".custom-checkbox:checked").length) {
                $("#chk-all").prop("checked", true).uniform();
            } else {
                $("#chk-all").removeAttr("checked").uniform();
            }
        });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="checkbox" id='checkall' /> Select All<br/>
 <input type="checkbox" class='custom-checkbox' name="languages" value="PHP"> PHP<br/>
 <input type="checkbox" class='custom-checkbox' name="languages" value="AngularJS"> AngularJS<br/>
 <input type="checkbox" class='custom-checkbox' name="languages" value="Python"> Python<br/>
 <input type="checkbox" class='custom-checkbox' name="languages" value="Java"> Java<br/>


0

L'altro modo di fare è,

uso $('#check2').click();

questo fa sì che l'uniforme controlli la casella e aggiorni le sue maschere


-1

casella di controllo che si comporta come radio btn

$(".checkgroup").live('change',function() { var previous=this.checked; $(".checkgroup).attr("checked", false); $(this).attr("checked", previous); });

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.