Come posso verificare se una casella è selezionata in jQuery?


4550

Devo controllare la checkedproprietà di una casella di controllo ed eseguire un'azione in base alla proprietà selezionata usando jQuery.

Ad esempio, se la casella di controllo Età è selezionata, allora devo mostrare una casella di testo per inserire l'età, altrimenti nascondere la casella di testo.

Ma il seguente codice restituisce falseper impostazione predefinita:

if ($('#isAgeSelected').attr('checked'))
{
    $("#txtAge").show();
}
else
{
    $("#txtAge").hide();
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input type="checkbox" id="isAgeSelected"/>

<div id="txtAge" style="display:none">
Age is selected
</div>

Come posso interrogare correttamente la checkedproprietà?


14
$ ('# isAgeSelected') restituisce la raccolta, sostituiscila con: $ ('# isAgeSelected') [0] .checked
zamoldar

14
perché no$('#isAgeSelected').checked
Don Cheadle,

1
Per una risposta completa (e corretta) vedi: stackoverflow.com/questions/426258/...
Paul Kenjora

12
Poiché i selettori jQuery restituiscono l'array, è possibile utilizzare$('#isAgeSelected')[0].checked
Felipe Leão,

2
per me il seguente tweak ha funzionato: sostituire .attr ('controllato') con .is (': controllato')
Mark N Hopgood,

Risposte:


3433

Come interrogare correttamente la proprietà selezionata?

La checkedproprietà di un elemento DOM della casella di controllo fornisce lo checkedstato dell'elemento.

Dato il tuo codice esistente, potresti quindi fare questo:

if(document.getElementById('isAgeSelected').checked) {
    $("#txtAge").show();
} else {
    $("#txtAge").hide();
}

Tuttavia, c'è un modo molto più bello per farlo, usando toggle:

$('#isAgeSelected').click(function() {
    $("#txtAge").toggle(this.checked);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="checkbox" id="isAgeSelected"/>
<div id="txtAge" style="display:none">Age is something</div>


36
ho provato anche la suddetta condizione, ma restituisce solo false
Prasad,

24
. $ ( "# txtAge") a ginocchiera (this.checked); Funziona esattamente come $ ("# txtAge"). Toggle (). Quindi, se per qualche motivo lo stato è controllato e il div successivo è nascosto (hai fatto clic sul pulsante indietro nel browser) - non funzionerà come previsto.
Maksim Vi.

23
@Chiramisu - Se avessi letto la risposta fino in fondo, avresti notato che la mia modifica non utilizza il is(':checked')business.
karim79,

8
per impostare: $ ("# chkmyElement") [0] .checked = true; ottenere: if ($ ("# chkmyElement") [0] .checked)
JJ_Coder4Hire

28
Questa non è una risposta alla domanda. this.checkednon è jQuery, come richiesto dall'OP. Inoltre, funziona solo quando l'utente fa clic sulla casella di controllo, che non fa parte della domanda. La domanda è, di nuovo, How to check whether a checkbox is checked in jQuery?in qualsiasi momento con o senza fare clic sulla casella di controllo e in jQuery.
Marc Compte,

1847

Usa la funzione is () di jQuery :

if($("#isAgeSelected").is(':checked'))
    $("#txtAge").show();  // checked
else
    $("#txtAge").hide();  // unchecked

19
Se non hai bisogno di durata, allentamento ecc., Puoi usare $("#txtAge").toggle($("#isAgeSelected").is(':checked'))
naor

13
+1 ci sono diversi modi per ottenere la proprietà controllata. Alcuni sono elencati qui
user3199690

In realtà @NickG jQuery ha una : selettore visibile
hvdd

2
@hvdd Lo so - ho detto "proprietà", non selettore.
NickG,

@NickG ... Non capisco cosa intendi. jQuery non ha .visible"proprietà" ( proprietà ? intendi metodo ?) perché l'elemento no HTML ha una proprietà visibile . Hanno una display proprietà di stile ed è un po 'più complesso di on / off.
xDaizu,

567

Uso di jQuery> 1.6

<input type="checkbox" value="1" name="checkMeOut" id="checkMeOut" checked="checked" />

// traditional attr
$('#checkMeOut').attr('checked'); // "checked"
// new property method
$('#checkMeOut').prop('checked'); // true

Utilizzando il nuovo metodo della proprietà:

if($('#checkMeOut').prop('checked')) {
    // something when checked
} else {
    // something else when not
}

27
Vorrei sapere perché questa non è la risposta ... se stai usando jquery, il .propmetodo è il modo progettato per controllare gli oggetti di scena. .. ... Se hai intenzione di fare l' .is(":checked")approccio, va bene, ma non è il modo progettato per farlo usando jquery. destra?
dsdsdsdsd,

1
@dsdsdsdsd presumibilmente perché ha bisogno di un altro passaggio di compatibilità all'indietro (sto affrontando lo stesso problema in questo momento).
user98085

18
.is(":checked")e .prop("checked")sono entrambi modi validi per ottenere lo stesso risultato in jQuery, .isfunzionerà in tutte le versioni, .proprichiede 1.6+
gnarf

Se si utilizza .attr('checked')in jQuery 1.11.3, si ottiene indefinito, dove se si utilizza .prop('checked'), si ottiene vero / falso. Non vedo perché l'hanno cambiato per funzionare in questo modo quando i browser più vecchi non possono supportare le versioni jQuery successive che sono state introdotte .prop()e quindi necessarie .attr(). L'unica cosa che redime è che i browser più vecchi (cioè IE 8) non possono supportare nulla> jQuery 1.9. Spero che non abbiano fatto questo (make .attr('checked')= undefined) in quella versione! Fortunatamente, c'è sempre this.checked.
vapcguy,

230

jQuery 1.6+

$('#isAgeSelected').prop('checked')

jQuery 1.5 e precedenti

$('#isAgeSelected').attr('checked')

Qualsiasi versione di jQuery

// Assuming an event handler on a checkbox
if (this.checked)

Tutto il merito va a Xian .


8
Tecnicamente, this.checkedutilizza JavaScript direttamente. Adoro quella risposta cross-jQuery!
vapcguy,

170

Sto usando questo e questo funziona perfettamente:

$("#checkkBoxId").attr("checked") ? alert("Checked") : alert("Unchecked");

Nota: se la casella di controllo è selezionata, verrà restituito true altrimenti non definito, quindi è meglio verificare il valore "TRUE".


6
Questo funziona perché $ ("# checkkBoxId"). Attr ("controllato") restituisce "controllato" o "" (stringa vuota). E una stringa vuota è falsa, una stringa non vuota è verità, vedi i valori di verità
Adrien Be

7
Con jquery 2.1.x restituisce sempre controllato se è controllato di default ... Non so se questo comportamento sia intenzionale, ma sicuramente non funziona (suppongo che sia un bug) ... Il val () non funziona neanche, rimane "acceso". Il prop () funziona correttamente e dom.checked funziona.
inf3rno,

1
E il problema si presenta quando devi supportare i browser più vecchi con .attr()! Se solo avessero lasciato abbastanza bene da soli .... Trovato un'altra risposta qui ha detto che puoi semplicemente usare this.checkedper una soluzione cross-jQuery, dal momento che è semplicemente Javascript.
vapcguy,

.attr ('controllato') verificherà se è selezionato per impostazione predefinita, sì. Perché sta controllando l' attributo html , non lo stato corrente. La versione precedente era un bug (anche se uno che è stato sfruttato molto, immagino).
Jay Irvine,

149

Uso:

<input type="checkbox" name="planned_checked" checked id="planned_checked"> Planned

$("#planned_checked").change(function() {
    if($(this).prop('checked')) {
        alert("Checked Box Selected");
    } else {
        alert("Checked Box deselect");
    }
});

    $("#planned_checked").change(function() {
        if($(this).prop('checked')) {
            alert("Checked Box Selected");
        } else {
            alert("Checked Box deselect");
        }
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<input type="checkbox" name="planned_checked" checked id="planned_checked"> Planned


119

Da jQuery 1.6, il comportamento di jQuery.attr()è cambiato e gli utenti sono incoraggiati a non usarlo per recuperare lo stato controllato di un elemento. Invece, dovresti usare jQuery.prop():

$("#txtAge").toggle(
    $("#isAgeSelected").prop("checked") // For checked attribute it returns true/false;
                                        // Return value changes with checkbox state
);

Altre due possibilità sono:

$("#txtAge").get(0).checked
$("#txtAge").is(":checked")

e $ ("# txtAge") [0] .checked
Yevgeniy Afanasyev

101

Questo ha funzionato per me:

$get("isAgeSelected ").checked == true

Dove isAgeSelected l'ID del controllo.

Inoltre, la risposta di @ karim79 funziona bene. Non sono sicuro di cosa mi sono perso al momento del test.

Nota, questa è la risposta che utilizza Microsoft Ajax, non jQuery


4
In tutti i casi, in tutti i normali linguaggi di programmazione, è possibile omettere== true
RedPixel il

@RedPixel A meno che tu non abbia a che fare con tipi nulli. :) (smiley pedante)
Kolob Canyon

88

Se stai utilizzando una versione aggiornata di jquery, devi cercare il .propmetodo per risolvere il problema:

$('#isAgeSelected').prop('checked')tornerà truese selezionato e falsese non selezionato. L'ho confermato e ho riscontrato questo problema in precedenza. $('#isAgeSelected').attr('checked')e $('#isAgeSelected').is('checked')sta tornando undefinedche non è una risposta degna per la situazione. Quindi fai come indicato di seguito.

if($('#isAgeSelected').prop('checked')) {
    $("#txtAge").show();
} else {
    $("#txtAge").hide();
}

Spero che aiuti:) - Grazie.


perchè no $('#isAgeSelected').checked?
Don Cheadle,

1
per usare .è necessario un punto $ ('# isAgeSelected'). is (': checked')
Patrick

62

L'uso del Clickgestore eventi per la proprietà checkbox non è affidabile, in quantochecked proprietà può cambiare durante l'esecuzione del gestore eventi stesso!

Idealmente, si desidera inserire il codice in un changegestore eventi come viene attivato ogni volta che il valore della casella di controllo viene modificato (indipendentemente da come è stato fatto).

$('#isAgeSelected').bind('change', function () {

   if ($(this).is(':checked'))
     $("#txtAge").show();
   else
     $("#txtAge").hide();
});

3
A partire da jQuery 1.7, il .on()metodo è il metodo preferito per allegare i gestori di eventi a un documento.
naor

61

Uso:

<input type="checkbox" id="abc" value="UDB">UDB
<input type="checkbox" id="abc" value="Prasad">Prasad
$('input#abc').click(function(){
  if($(this).is(':checked'))
  {
    var checkedOne=$(this).val()
    alert(checkedOne);

    // Do some other action
  }
})

Ciò può essere utile se si desidera che l'azione richiesta debba essere eseguita solo quando si seleziona la casella non nel momento in cui si rimuove il segno di spunta.


53

Ho deciso di pubblicare una risposta su come fare esattamente la stessa cosa senza jQuery. Solo perché sono un ribelle.

var ageCheckbox = document.getElementById('isAgeSelected');
var ageInput = document.getElementById('txtAge');

// Just because of IE <333
ageCheckbox.onchange = function() {
    // Check if the checkbox is checked, and show/hide the text field.
    ageInput.hidden = this.checked ? false : true;
};

Per prima cosa ottieni entrambi gli elementi in base al loro ID. Quindi si assegna onchangeall'evento della casella di controllo una funzione che controlla se la casella di controllo è stata selezionata e imposta ilhidden proprietà del campo di testo dell'età in modo appropriato. In quell'esempio usando l'operatore ternario.

Ecco un violino per testarlo.

appendice

Se la compatibilità tra browser è un problema, propongo di impostare la displayproprietà CSS su none e inline .

elem.style.display = this.checked ? 'inline' : 'none';

Più lento ma compatibile con più browser.


Bene, .hiddennon è molto cross-browser, anche se mi piace questa soluzione :)
Florian Margaine,

È davvero il modo migliore di usare style. Ciò è sfortunato, poiché le .hiddenprestazioni sono decisamente migliori .
Florian Margaine,

Compito all'interno di un operatore condizionale? Legale, si. Tuttavia, non è quello che definirei un buon stile.
Jules,

può semplificare a: ageInput.hidden =! this.checked; (Odio quando le persone usano letteralmente booleani inutilmente ... se stai usando sia "vero" che "falso" nella stessa semplice affermazione, probabilmente non è nemmeno necessario usarli)
JoelFan

52

Credo che potresti farlo:

if ($('#isAgeSelected :checked').size() > 0)
{
    $("#txtAge").show(); 
} else { 
    $("#txtAge").hide();
}

alert ($ ( 'ingresso [name = isAgeSelected]') attr ( 'controllato').); Il codice sopra mostra true / false in base al controllo. Qualsiasi problema con i tentativi precedenti
Prasad,

Prasad, stai facendo riferimento alla tua casella di controllo per nome o ID? Mi sto confondendo ora ...
Karim79,

Non puoi dargli un ID? Le cose sarebbero molto più facili, nel tuo esempio hai affrontato con il suo ID
xenon

Il metodo .size () è obsoleto a partire da jQuery 1.8. Usa invece la proprietà .length (con no () ;-)! E forse devi restare unito "#isAgeSelected: controllato".
François Breton,

47

Mi sono imbattuto nello stesso identico problema. Ho una casella di controllo ASP.NET

<asp:CheckBox ID="chkBox1" CssClass='cssChkBox1' runat="server" />

Nel codice jQuery ho usato il seguente selettore per verificare se la casella era selezionata o meno e sembra funzionare come un incantesimo.

if ($("'.cssChkBox1 input[type=checkbox]'").is(':checked'))
{ ... } else { ... }

Sono sicuro che puoi anche utilizzare l'ID anziché CssClass,

if ($("'#cssChkBox1 input[type=checkbox]'").is(':checked'))
{ ... } else { ... }

Spero che questo ti aiuta.



46

Questo codice ti aiuterà

$('#isAgeSelected').click(function(){
   console.log(this.checked);
   if(this.checked == true) {
        $("#txtAge").show();
    } else {
       $("#txtAge").hide();
   }
});

42

Questo funziona per me:

/* isAgeSelected being id for checkbox */

$("#isAgeSelected").click(function(){
  $(this).is(':checked') ? $("#txtAge").show() : $("#txtAge").hide();
});

41

Questo è un metodo diverso per fare la stessa cosa:

$(document).ready(function (){

    $('#isAgeSelected').click(function() {
        // $("#txtAge").toggle(this.checked);

        // Using a pure CSS selector
        if ($(this.checked)) {
            alert('on check 1');
        };

        // Using jQuery's is() method
        if ($(this).is(':checked')) {
            alert('on checked 2');
        };

        //  // Using jQuery's filter() method
        if ($(this).filter(':checked')) {
            alert('on checked 3');
        };
    });
});
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<input type="checkbox" id="isAgeSelected"/>
<div id="txtAge" style="display:none">Age is something</div>


35

Usa questo:

if ($('input[name="salary_in.Basic"]:checked').length > 0)

La lunghezza è maggiore di zero se la casella è selezionata.


33

Il mio modo di farlo è:

if ( $("#checkbox:checked").length ) {       
    alert("checkbox is checked");
} else {
    alert("checkbox is not checked");
}

31
$(selector).attr('checked') !== undefined

Questo ritorna truese l'ingresso è controllato e falsese non lo è.


4
Capisco perché questo potrebbe funzionare in determinati scenari, sebbene abbia lo stesso problema .attr('checked')in quanto non restituisce sempre lo stato corretto. Secondo la risposta di Salman A (e forse di altri), è invece un'opzione più sicura da utilizzare . Inoltre, è anche possibile dichiarare come . .prop('checked')undefinedvar undefined = 'checked';
WynandB,

.prop('checked')sembra una risposta migliore ora. Non era così affidabile al momento in cui è stato scritto. Non capisco, né penso che sia un buon idead per dichiarare indefinito.
fe_lix_

Come nota a margine, è meglio verificare se non definitotypeof (x) !== "undefined"
naor

In tal caso, credo che sia più preciso e più facile da leggere con! ==. Userei il tipo di (x) solo quando testerei una variabile che può essere stata o meno definita in passato.
fe_lix_

30
$(document).ready(function() {    
    $('#agecheckbox').click(function() {
        if($(this).is(":checked"))
        {
            $('#agetextbox').show();
        } else {
            $('#agetextbox').hide();
        }
    });
});

30

Puoi usare:

  if(document.getElementById('isAgeSelected').checked)
    $("#txtAge").show();  
  else
    $("#txtAge").hide();

if($("#isAgeSelected").is(':checked'))
  $("#txtAge").show();  
else
  $("#txtAge").hide();

Entrambi dovrebbero funzionare.


27

1) Se il markup HTML è:

<input type="checkbox"  />

attr utilizzato:

$(element).attr("checked"); // Will give you undefined as initial value of checkbox is not set

Se si usa il puntello:

$(element).prop("checked"); // Will give you false whether or not initial value is set

2) Se il markup HTML è:

 <input type="checkbox"  checked="checked" />// May be like this also  checked="true"

attr utilizzato:

$(element).attr("checked") // Will return checked whether it is checked="true"

Prop usato:

$(element).prop("checked") // Will return true whether checked="checked"

Questo è un vero problema. Soluzione alternativa: aggiungere un evento di modifica all'input: <input type = "checkbox" onchange = "ChangeChkBox ()" /> quindi utilizzare quell'evento per modificare una variabile JavaScript booleana e utilizzare la variabile JavaScript invece di interrogare direttamente la casella di controllo.
Graham Laight,

24

Questo esempio è per il pulsante.

Prova quanto segue:

<input type="button" class="check" id="checkall" value="Check All" />  &nbsp; <input type="button" id="remove" value="Delete" /> <br/>

<input type="checkbox" class="cb-element"  value="1" /> Checkbox  1 <br/>
<input type="checkbox" class="cb-element"  value="2" /> Checkbox  2 <br/>
<input type="checkbox" class="cb-element"  value="3" /> Checkbox  3 <br/>


$('#remove').attr('disabled', 'disabled'); 

$(document).ready(function() {  

    $('.cb-element').click(function() {

        if($(this).prop('checked'))
        {
            $('#remove').attr('disabled', false);
        }
        else
        {
            $('#remove').attr('disabled', true);
        }
    });   

    $('.check:button').click(function()
{
    var checked = !$(this).data('checked');
    $('input:checkbox').prop('checked', checked);
    $(this).data('checked', checked);

    if(checked == true)
    {
        $(this).val('Uncheck All');
         $('#remove').attr('disabled', false);
    }

    else if(checked == false)
    {
        $(this).val('Check All');
        $('#remove').attr('disabled', true);
    }
});
});

24

La risposta migliore non l'ha fatto per me. Questo ha fatto però:

<script type="text/javascript">
    $(document).ready(function(){

        $("#li_13").click(function(){
            if($("#agree").attr('checked')){
                $("#saveForm").fadeIn();
            }
            else
            {
                $("#saveForm").fadeOut();
            }
        });
    });
</script>

Fondamentalmente quando si fa clic sull'elemento # li_13, controlla se l'elemento # accetta (che è la casella di controllo) viene controllato utilizzando la .attr('checked')funzione. Se è quindi sbiadito nell'elemento #saveForm, e in caso contrario dissolvenza Esci dall'elemento saveForm.


22

Sto usando questo:

 <input type="checkbox" id="isAgeSelected" value="1" /> <br/>
 <input type="textbox" id="txtAge" />

 $("#isAgeSelected").is(':checked') ? $("#txtAge").show() : $("#txtAge").hide();

22

Sebbene tu abbia proposto una soluzione JavaScript per il tuo problema (mostrando un textboxquando checkboxè checked), questo problema potrebbe essere risolto solo da CSS . Con questo approccio, il modulo funziona per gli utenti che hanno disabilitato JavaScript.

Supponendo che tu abbia il seguente HTML:

<label for="show_textbox">Show Textbox</label>
<input id="show_textbox" type="checkbox" />
<input type="text" />

È possibile utilizzare il seguente CSS per ottenere la funzionalità desiderata:

 #show_textbox:not(:checked) + input[type=text] {display:none;}

Per altri scenari, potresti pensare a selettori CSS appropriati.

Ecco un violino per dimostrare questo approccio .


21

Attiva / disattiva: 0/1 o altro

<input type="checkbox" id="nolunch" />
<input id="checklunch />"

    $('#nolunch').change(function () {
    if ($(this).is(':checked')) {
        $('#checklunch').val('1');
    };
    if ($(this).is(':checked') == false) {
        $('#checklunch').val('0');
    };
});

19

Penso che sarà quello semplice

$('#isAgeSelected').change(function() {
    if($(this).is(":checked")) {
        $('#txtAge').show();
    }
else{
        $('#txtAge').hide();
    }                                          
});
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.