Як перевірити, чи встановлено прапорець у jQuery?


4548

Мені потрібно перевірити checkedвластивість прапорець і виконати дію, засновану на позначеній властивості, використовуючи jQuery.

Наприклад, якщо прапорець "Вік" встановлений, мені потрібно показати текстове поле, щоб ввести вік, інакше приховати текстове поле.

Але наступний код повертається falseза замовчуванням:

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>

Як я успішно запитую checkedвласність?


14
$ ('# isAgeSelected') повертає колекцію, заміняє її на: $ ('# isAgeSelected') [0]. перевірено
zamoldar

14
чому б ні$('#isAgeSelected').checked
Дон Чіддл

1
Для повного (і правильного) відповіді см: stackoverflow.com/questions/426258 / ...
Paul Kenjora

12
Оскільки селектори jQuery повертають масив, ви можете використовувати$('#isAgeSelected')[0].checked
Felipe Leão

2
для мене спрацював наступний твіт: замінити .attr ('перевірено') на .is (': перевірено')
Mark N Hopgood

Відповіді:


3432

Як я успішно запитую перевірений ресурс?

checkedВластивість Прапорець DOM елемента дасть вам checkedстан елемента.

Враховуючи існуючий код, ви можете зробити це:

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

Однак, є набагато красивіший спосіб зробити це, використовуючи 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
Я також спробував вищевказану умову, але вона повертається лише помилково
Prasad

24
$ ("# txtAge"). перемикання (це.позначено); Чи точно так само, як $ ("# txtAge"). Toggle (). Отже, якщо з якихось причин перевіряється стан, а наступний div захований (ви натиснули кнопку назад у своєму браузері) - він не працюватиме, як очікувалося.
Максим Ві.

23
@Chiramisu - Якби ти до кінця прочитав відповідь, ти помітив би, що моя редакція не використовує is(':checked')бізнес.
karim79

8
встановити: $ ("# chkmyElement") [0]. перевірено = вірно; щоб отримати: якщо ($ ("# chkmyElement") [0] .визначено)
JJ_Coder4Hire

28
Це не відповідь на запитання. this.checkedце не jQuery, як просив ОП. Також він працює лише тоді, коли користувач натискає прапорець, що не є частиною питання. Питання, знову ж таки, How to check whether a checkbox is checked in jQuery?у будь-який момент з натисканням або без натискання прапорець у jQuery.
Marc Compte

1846

Використовуйте функцію jQuery's () :

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

19
Якщо вам не потрібна тривалість, ослаблення тощо, ви можете скористатись $("#txtAge").toggle($("#isAgeSelected").is(':checked'))
1313

13
+1 Є різні способи отримати перевірену власність. Деякі перераховані тут
користувач3199690

На насправді @NickG JQuery робить є : видимий селектор
hvdd

2
@hvdd Я знаю - я сказав "властивість", а не селектор.
NickG

@NickG ... я не розумію, що ти маєш на увазі. jQuery не має .visible"властивості" ( властивість ? Ви маєте на увазі метод ?), оскільки у елемента HTML немає видиме властивість. Вони мають display властивість стилю, і це трохи складніше, ніж увімкнення / вимкнення.
xDaizu

566

Використовуючи 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

Використовуючи новий метод властивості:

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

27
Мені хотілося б знати, чому це не відповідь ... якщо ви взагалі використовуєте jquery, то .propметод - це призначений спосіб перевірити реквізит. .. ... Якщо ви збираєтеся робити .is(":checked")підхід, це добре, але це не призначений спосіб зробити це за допомогою jquery. правильно?
dsdsdsdsd

1
@dsdsdsdsd, мабуть, тому, що він потребує ще одного кроку сумісності назад (я зараз стикаюся з тією ж проблемою).
user98085

18
.is(":checked")і .prop("checked")обидва дійсні способи отримати однаковий результат у jQuery, .isпрацюватимуть у всіх версіях, .propпотрібно 1.6+
gnarf

Якщо ви використовуєте .attr('checked')jQuery 1.11.3, ви не визначитесь, де, якщо ви будете використовувати .prop('checked'), ви отримаєте true / false. Я не бачу, чому вони змінили його таким чином, коли старші браузери не можуть підтримувати новіші версії jQuery, які були запроваджені .prop()і тому потрібні .attr(). Єдиним благом збереження є те, що старіші браузери (тобто IE 8) нічого не можуть підтримувати> jQuery 1.9. Сподіваємось, вони цього не зробили (make .attr('checked')= undefined) у цій версії! На щастя, завжди є this.checked.
vapcguy

230

jQuery 1.6+

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

jQuery 1.5 і нижче

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

Будь-яка версія jQuery

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

Вся заслуга належить Сіану .


8
Технічно this.checkedвикористовується прямий Javascript. Але я люблю цю крос-jQuery-версію відповіді!
vapcguy

170

Я використовую це, і це працює абсолютно чудово:

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

Примітка: Якщо прапорець встановлений, він повернеться істинно, інакше невизначений, тож краще встановіть значення "ІСТИНА".


6
Це працює, тому що $ ("# checkkBoxId"). Attr ("перевірено") повертає "перевірено" або "" (порожній рядок). І порожня рядок є хибною, непуста рядок - правдою, дивіться про значення truthy / falesy docs.nodejitsu.com/articles/javascript-conventions/…
Adrien Be

7
За допомогою jquery 2.1.x він повертається завжди, якщо він перевіряється за замовчуванням ... Я не знаю, чи є така поведінка навмисною, але вона, безумовно, не працює (я думаю, що це помилка) ... Val () також не працює, він залишається "на". Підпору () працює належним чином, і Dom. перевірений працює.
inf3rno

1
І проблема виникає, коли вам доведеться підтримувати старші веб-переглядачі .attr()! Якби вони просто залишилися досить добре в спокої .... Знайшовши іншу відповідь тут, ви можете сказати, що ви можете просто використовувати this.checkedдля крос-jQuery рішення, оскільки це в основному Javascript.
vapcguy

.attr ("перевірено") перевірить, чи перевірено це за замовчуванням, так. Тому що це перевірка атрибута html , а не поточний стан. Попередня версія була помилкою (я думаю, що вона дуже багато експлуатувалася).
Джей Ірвін

149

Використання:

<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

Починаючи з jQuery 1.6, поведінка jQuery.attr()змінилася, і користувачам рекомендується не використовувати її для отримання перевіреного стану елемента. Натомість слід використовувати jQuery.prop():

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

Ще дві можливості:

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

і $ ("# txtAge") [0]. перевірено
Євгеній Афанасьєв

101

Це працювало для мене:

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

Де isAgeSelectedідентифікатор управління.

Крім того , @ karim79 - х відповідь працює відмінно. Я не впевнений, що я пропустив під час тестування.

Зауважте, що ця відповідь використовує Microsoft Ajax, а не jQuery


4
У всіх випадках у всіх нормальних мовах програмування можна пропустити== true
RedPixel

@RedPixel Якщо ви не маєте справу зі змінними типами. :) (педантичний смайлик)
Калонь Колоб

88

Якщо ви використовуєте оновлену версію jquery, вам слід скористатися .propметодом вирішення проблеми:

$('#isAgeSelected').prop('checked')повернеться, trueякщо встановлено прапорець і falseякщо його не встановлено. Я підтвердив це, і я стикався з цим питанням раніше. $('#isAgeSelected').attr('checked')і $('#isAgeSelected').is('checked')повертається, undefinedщо не є гідною відповіддю для ситуації. Так роби, як зазначено нижче.

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

Сподіваюся, що це допомагає:) - Дякую.


чому ні $('#isAgeSelected').checked?
Дон Чейдл

1
для використання .а вам потрібно двокрапка $ ( '# isAgeSelected') є ( ': перевірено').
Patrick

62

Використання Clickобробника подій для властивості прапорця недостовірне, оскільки checkedвластивість може змінюватися під час виконання самого обробника подій!

В ідеалі ви хочете вставити свій код у changeобробник подій, такий як він знімається щоразу, коли значення прапорця змінюється (незалежно від того, як це робиться).

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

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

3
Як і в jQuery 1.7, .on()метод є кращим методом приєднання оброблювачів подій до документа.
1313

61

Використання:

<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
  }
})

Це може допомогти, якщо ви хочете, щоб виконати необхідні дії лише тоді, коли ви поставите прапорець не в той момент, коли ви знімете чек.


53

Я вирішив опублікувати відповідь про те, як зробити таку саму річ без jQuery. Просто тому, що я бунтівник.

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;
};

Спочатку ви отримуєте обидва елементи за їх ідентифікатором. Потім ви призначаєте onchangeподію прапорця функцією, яка перевіряє, чи перевірили прапорець прапорець і встановив hiddenвластивість текстового поля віку. У цьому прикладі з використанням потрійного оператора.

Ось вам скрипка для тестування.

Додаток

Якщо сумісність між веб-браузером є проблемою, то я пропоную встановити displayвластивість CSS жодним і вбудованим .

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

Повільніший, але сумісний із браузером.


Ну, .hiddenне дуже крос-браузер, хоча мені це рішення подобається :)
Флоріан Маргайн

Це справді найкращий спосіб використання style. Це прикро, однак, як .hiddenпродуктивність набагато краща .
Флоріан Маргайн

Призначення всередині умовного оператора? Юридичний, так. Але не те, що я б назвав гарним стилем.
Жуль

можна спростити до: ageInput.hidden =! this. галочка; (Я ненавиджу, коли люди без зайвих зусиль використовують булеві літерали ... якщо ви використовуєте і "true", і "false" в тому самому простому твердженні, ймовірно, не потрібно використовувати жодне)
JoelFan

52

Я вважаю, ви могли це зробити:

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

попередження ($ ('input [name = isAgeSelected]'). attr ('перевірено')); Наведений вище код показує істинне / хибне на основі перевірки. Будь-яка проблема з попередніми спробами
Прасад

Prasad, ви посилаєтесь на свій прапорець за іменем чи ідентифікатором? Я зараз
плутаюсь

Ви не можете дати йому посвідчення особи? Все було б набагато простіше. У вашому прикладі ви вирішите це за допомогою ID
xenon

Метод .size () застарілий, починаючи з jQuery 1.8. Використовуйте замість цього .length (без властивості () ;-)! І, можливо, вам доведеться склеїти "#isAgeSelected: перевірено".
Франсуа Бретон

47

Я зіткнувся з точно таким же питанням. У мене є прапорець ASP.NET

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

У коді jQuery я використав наступний селектор, щоб перевірити, чи встановлено прапорець, чи ні, і, здається, він працює як шарм.

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

Я впевнений, що ви можете також використовувати ідентифікатор замість CssClass,

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

Я сподіваюся, що це вам допоможе.


46

Існує багато способів перевірити, чи прапорець встановлений чи ні:

Спосіб перевірки за допомогою jQuery

if (elem.checked)
if ($(elem).prop("checked"))
if ($(elem).is(":checked"))
if ($(elem).attr('checked'))

Перевірте приклад або також документ:


46

Цей код вам допоможе

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

42

Це працює для мене:

/* isAgeSelected being id for checkbox */

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

41

Це кілька різних методів зробити те саме:

$(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

Використовуй це:

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

Довжина більше нуля, якщо прапорець встановлений.


33

Мій спосіб зробити це:

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

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

Це повертається, trueякщо вхід перевірено, а falseякщо ні.


4
Я розумію, чому це може працювати в певних сценаріях, хоча воно має те саме питання, що і .attr('checked')в тому, що воно не завжди повертає правильний стан. Згідно Салман A «s відповідь (і , можливо , інших»), це більш безпечний варіант, щоб використовувати .prop('checked')замість. Крім того, це також можна оголосити undefinedяк var undefined = 'checked';.
WynandB

.prop('checked')зараз здається кращою відповіддю. На той час це було не так надійно. Я не розумію, і не вважаю, що це гарна ідея перевизначити невизначене.
fe_lix_

Як зауваження, перевірити наявність невизначеності краще зtypeof (x) !== "undefined"
1313

У такому випадку я вважаю, що це точніше і простіше читати! ==. Я би використовував typeof (x) лише при тестуванні змінної, яка може бути або не була визначена в минулому.
fe_lix_

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

30

Ви можете використовувати:

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

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

Вони обоє повинні працювати.


27

1) Якщо ваша розмітка HTML:

<input type="checkbox"  />

attr використовується:

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

Якщо використовується опора:

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

2) Якщо ваша розмітка HTML:

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

attr використовується:

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

Реквізит використовується:

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

Це РЕАЛЬНА проблема. Моє вирішення - додайте події зміни до вводу: <input type = "checkbox" onchange = "ChangeChkBox ()" />, тоді використовуйте цю подію для зміни булевої змінної JavaScript, і використовуйте змінну JavaScript замість того, щоб запитувати прапорець безпосередньо.
Грем Лайт

24

Цей приклад для кнопки.

Спробуйте наступне:

<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

Верхня відповідь не зробила це для мене. Це все-таки було зроблено:

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

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

В основному, коли елемент # li_13 натискається, він перевіряє, чи елемент # погоджується (що є прапором) перевіряється за допомогою .attr('checked')функції. Якщо він тоді fadeIn елемент #saveForm, а якщо не fadeOut елемент saveForm.


22

Я використовую це:

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

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

22

Незважаючи на те, що ви запропонували рішення JavaScript для своєї проблеми (відображення, textboxколи checkboxє checked), цю проблему можна вирішити просто css . При такому підході ваша форма працює для користувачів, які відключили JavaScript.

Припустимо, що у вас є такий HTML:

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

Ви можете використовувати наступний CSS для досягнення потрібної функціональності:

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

Для інших сценаріїв ви можете придумати відповідних CSS-селекторів.

Ось Fiddle, щоб продемонструвати такий підхід .


21

Перемикання: 0/1 або інше

<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

Я думаю, що це буде найпростіше

$('#isAgeSelected').change(function() {
    if($(this).is(":checked")) {
        $('#txtAge').show();
    }
else{
        $('#txtAge').hide();
    }                                          
});
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.