Поставте прапорець, чи встановлено прапорець jQuery


1187

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

Я використовую наступний код, але він завжди повертає кількість зареєстрованих прапорців незалежно від ідентифікатора.

function isCheckedById(id) {
    alert(id);
    var checked = $("input[@id=" + id + "]:checked").length;
    alert(checked);

    if (checked == 0) {
        return false;
    } else {
        return true;
    }
}

Масив прапорець ? Ніколи не чула про таке. Це щось специфічне для JQuery чи плагін / віджет?
Pekka

2
масив прапорців означає щось на зразок: <input type = "checkbox" name = "chk []" id = "chk []" value = "apple"> <input type = "checkbox" name = "chk []" id = "chk []" value = "banana"> <input type = "checkbox" name = "chk []" id = "chk []" value = "orange"> тощо.
Джейк

2
що не так з масивом прапорців? як ще ви зробили б "перевірити все, що застосовується"?
nickf

5
Переконайтесь, що ваш ids унікальний! nameможе (і в цьому випадку повинен) повторитись, але ви знайдете багато дивних речей, якщо дублюєте id! = D
Джефф Руперт

Мені довелося видалити "@", щоб він працював. Крім того, ви можете мінімізувати останні 5 рядків до 1: return (перевірено! = 0);
Б. Клей Шеннон

Відповіді:


688

Ідентифікатори повинні бути унікальними у вашому документі, тобто це робити не слід :

<input type="checkbox" name="chk[]" id="chk[]" value="Apples" />
<input type="checkbox" name="chk[]" id="chk[]" value="Bananas" />

Замість цього, киньте ідентифікатор, а потім виберіть їх за назвою або за допомогою елемента, що містить:

<fieldset id="checkArray">
    <input type="checkbox" name="chk[]" value="Apples" />

    <input type="checkbox" name="chk[]" value="Bananas" />
</fieldset>

А тепер jQuery:

var atLeastOneIsChecked = $('#checkArray:checkbox:checked').length > 0;
//there should be no space between identifier and selector

// or, without the container:

var atLeastOneIsChecked = $('input[name="chk[]"]:checked').length > 0;

Для мене працювали без подвійних лапок на ім'я вводу: input [name = multicheck []]: перевірено, дякую!
Алехандро Кіроз

30
Навіщо використовувати, $('#checkArray :checkbox:checked').length > 0;коли більш прості $('#checkArray').checkedроботи і доступні в більшості версій?
Дон Чіддл

5
@Oddman це працює, тільки не на об'єкт jquery. замість $ (elem) .виконано, спробуйте elem.cked.
Ден Вільямс

1
@DanWilliams так, але не в прикладі mmcrae дав.
Оддман

Другий працював на мене. Дякую!! var atLeastOneIsChecked = $('input[name="chk[]"]:checked').length > 0;
Девід Сільва-Баррера

2025
$('#' + id).is(":checked")

Це отримується, якщо прапорець встановлений.

Для масиву прапорців з такою ж назвою ви можете отримати список зареєстрованих:

var $boxes = $('input[name=thename]:checked');

Потім перегляньте їх і подивіться, що ви можете перевірити:

$boxes.each(function(){
    // Do stuff here with this
});

Щоб дізнатися, скільки перевірено, ви можете зробити:

$boxes.length;

2
Інший спосіб - $('#'+id).attr('checked')це рівнозначний, $('#' + id).is(":checked")але простіший запам'ятовується ІМО.
Зубін

85
@Zubin: Будь обережним .attr('checked'). Його поведінка змінилася в jQuery 1.6. Він використовувався для повернення falseабо true. Тепер він повертається undefinedабо "checked". .is(':checked')не має цієї проблеми.
Джої Адамс

1
@John Boker: вибачте за коментар некро, але чому це, $('.ClassName').is(':checked')здається, не працює, але $('#' + id).is(":checked")працює? окрім того, що один шукає ідентифікатор, а другий - ім'я класу.
Mike_OBrien

@Mike_OBrien Проблема може полягати в тому, що існує декілька прапорців з цим іменем класу. Це (": перевірено") дійсно працює лише на одному елементі.
Джон Бокер

5
Примітка: розмір () застарілий з часу jQuery 1.8 - замість цього використовується .length
JM4

312
$('#checkbox').is(':checked'); 

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


6
дуже корисно при використанні $ (this) .is (': перевірено'); Дякую!
PinoyStackOverflower

Цей спосіб корисний для того, щоб перевірити, чи встановлено прапорець, де ви знаєте, як його вибрати, дякую
Омар Ісаїд

Це працювало для мене, я використовував це раніше, var isChecked = $('#CheckboxID').attr('checked') ? true : false; але не повертав завжди правильного значення. Тож дякую!
leiit

120

Усі наступні методи корисні:

$('#checkbox').is(":checked")

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

$('#checkbox')[0].checked

$('#checkbox').get(0).checked

Рекомендується уникати DOMelement або вбудованого "this. перевіреного" замість того, щоб jQuery за методом використовувався слухачем подій.


98

Код jQuery, щоб перевірити, чи встановлено прапорець:

if($('input[name="checkBoxName"]').is(':checked'))
{
  // checked
}else
{
 // unchecked
}

Як варіант:

if($('input[name="checkBoxName"]:checked'))
{
    // checked
}else{
  // unchecked
}

4
Перше рішення відсутня :... Виправте одне: if(('input[name="checkBoxName"]').is(':checked')).
Aerendir

Пропущений знак долара ($), так і має бути if($('input[name="checkBoxName"]').is(':checked')).
Пенні Лю

Другий ніколи не запустить elseблок, оскільки об’єкт jQuery, навіть якщо він не містить відповідних елементів, є "truthy". Додайте .lengthдо кінця, тоді ви говорите.
Єретична мавпа

69

Найважливіша концепція, яку слід пам’ятати про перевірений атрибут - це те, що він не відповідає перевіреному властивості. Атрибут фактично відповідає властивості defaultChecked і його слід використовувати лише для встановлення початкового значення прапорця. Значення зареєстрованого атрибута не змінюється зі станом прапорця, тоді як властивість, що перевіряється, робить. Тому спосіб, який сумісний між веб-браузером, визначає, чи прапорець встановлений, - це використовувати властивість

Всі нижче методи можливі

elem.checked 

$(elem).prop("checked") 

$(elem).is(":checked") 

38

Ви можете використовувати цей код,

if($("#checkboxId").is(':checked')){
     // Code in the case checkbox is checked.
} else {
     // Code in the case checkbox is NOT checked.
}

29

Відповідно до документації jQuery, є наступні способи перевірити, чи встановлено прапорець чи ні. Розглянемо, наприклад, прапорець (Перевірити робочу jsfiddle з усіма прикладами)

<input type="checkbox" name="mycheckbox" id="mycheckbox" />
<br><br>
<input type="button" id="test-with-checked" value="Test with checked" />
<input type="button" id="test-with-is" value="Test with is" />
<input type="button" id="test-with-prop" value="Test with prop" />

Приклад 1 - З відміченим

$("#test-with-checked").on("click", function(){
    if(mycheckbox.checked) {
        alert("Checkbox is checked.");
    } else {
        alert("Checkbox is unchecked.");
    }
}); 

Приклад 2 - З jQuery є, ПРИМІТКА -: перевірено

var check;
$("#test-with-is").on("click", function(){
    check = $("#mycheckbox").is(":checked");
    if(check) {
        alert("Checkbox is checked.");
    } else {
        alert("Checkbox is unchecked.");
    }
}); 

Приклад 3 - З підтримкою jQuery

var check;
$("#test-with-prop").on("click", function(){
    check = $("#mycheckbox").prop("checked");
    if(check) {
         alert("Checkbox is checked.");
    } else {
        alert("Checkbox is unchecked.");
    }
}); 

Перевірте робочий jsfiddle


26

Ви можете спробувати це:

<script>
function checkAllCheckBox(value)
{
   if($('#select_all_').is(':checked')){
   $(".check_").attr ( "checked" ,"checked" );
    }
    else
    {
        $(".check_").removeAttr('checked');
    }

 }

</script>
<input type="checkbox" name="chkbox" id="select_all_" value="1" />


<input type="checkbox" name="chkbox" class="check_" value="Apples" />
<input type="checkbox" name="chkbox" class="check_" value="Bananas" />
<input type="checkbox" name="chkbox" class="check_" value="Apples" />
<input type="checkbox" name="chkbox" class="check_" value="Bananas" />

Це більше не є вдалим способом виконання дій, оскільки attrвідображає лише значення атрибута в HTML, а не значення властивості в DOM. Дивіться документацію дляattr , де він говорить : « Для того, щоб отримувати і змінювати властивості DOM , такі як checked, selectedабо disabledстан формених елементів, використовуйте .prop()метод.», А також документація дляprop , де він говорить , що « .prop()метод повинен бути використаний для набору disabledі checkedзамість від .attr()методу «.
Єретична мавпа

21

Ви можете використовувати будь-який із наведених нижче рекомендованих кодів за допомогою jquery.

if ( elem.checked ) {};
if ( $( elem ).prop( "checked" ) ) {};
if ( $( elem ).is( ":checked" ) ) {};

20

Я знаю, що ОП хочу jquery, але в моєму випадку чистий JS був відповіддю, тому якщо хтось, як я, тут і не має jquery або не хоче його використовувати - ось відповідь JS:

document.getElementById("myCheck").checked

Він повертає істину, якщо вхід з ідентифікатором myCheck встановлено, і помилково, якщо він не встановлений.

Просто як це.


11
сенс, який $("#myCheck")[0].checkedбуде працювати в jquery! : D
Санкарн

10

Ви можете це робити просто так;

Робоча скрипка

HTML

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

jQuery

$(document).ready(function () {
    var ckbox = $('#checkbox');

    $('input').on('click',function () {
        if (ckbox.is(':checked')) {
            alert('You have Checked it');
        } else {
            alert('You Un-Checked it');
        }
    });
});

або навіть простіше;

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

Якщо checkboxпрапорець встановлений, він повернеться trueінакшеundefined


or even simpler;->$("#checkbox").checked
Дон Чідл

10

Це також ідея, яку я часто використовую:

var active = $('#modal-check-visible').prop("checked") ? 1 : 0 ;

Якщо його поставити, він поверне 1; інакше він поверне 0.


7

Проста демонстрація для перевірки та встановлення прапорця.

jsfiddle !

$('.attr-value-name').click(function() {
    if($(this).parent().find('input[type="checkbox"]').is(':checked'))
    {
        $(this).parent().find('input[type="checkbox"]').prop('checked', false);
    }
    else
    {
        $(this).parent().find('input[type="checkbox"]').prop('checked', true);
    }
});

7

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

Наприкінці

<input class="cb" id="rd" type="checkbox">
<input class="cb" id="fd" type="checkbox">

var fd=$('.cb#fd').is(':checked');
var rd= $('.cb#rd').is(':checked');

Це спрацювало так, щоб викликати клас, а потім ідентифікатор. а не просто ідентифікатор. Це може бути пов’язано з вкладеними елементами DOM на цій сторінці, що спричинили проблему. Вирішення було вище.


6

Для прапорця з ідентифікатором

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

ви можете просто зробити

$("#id_input_checkbox13").prop('checked')

ви отримаєте trueабо falseяк повернене значення для вище синтаксису. Ви можете використовувати його, якщо в якості пункту як нормального булевого вираження.


5

Щось подібне може допомогти

togglecheckBoxs =  function( objCheckBox ) {

    var boolAllChecked = true;

    if( false == objCheckBox.checked ) {
        $('#checkAll').prop( 'checked',false );
    } else {
        $( 'input[id^="someIds_"]' ).each( function( chkboxIndex, chkbox ) {
            if( false == chkbox.checked ) {
                $('#checkAll').prop( 'checked',false );
                boolAllChecked = false;
            }
        });

        if( true == boolAllChecked ) {
            $('#checkAll').prop( 'checked',true );
        }
    }
}

5

Насправді, згідно з повідомленнями jsperf.com , операції DOM найшвидші, тоді $ (). Prop (), а потім $ (). Is () !!

Ось такі синтаксиси:

var checkbox = $('#'+id);
/* OR var checkbox = $("input[name=checkbox1]"); whichever is best */

/* The DOM way - The fastest */
if(checkbox[0].checked == true)
   alert('Checkbox is checked!!');

/* Using jQuery .prop() - The second fastest */
if(checkbox.prop('checked') == true)
   alert('Checkbox is checked!!');

/* Using jQuery .is() - The slowest in the lot */
if(checkbox.is(':checked') == true)
   alert('Checkbox is checked!!');

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


4

Увімкнути прапорець увімкнено

$("#checkall").click(function(){
    $("input:checkbox").prop( 'checked',$(this).is(":checked") );
})

2

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

Довідкова посилання

<label class="control-label col-sm-4">Check Box 2</label>
    <input type="checkbox" name="checkbox2" id="checkbox21" value=ck1 /> ck1<br />
    <input type="checkbox" name="checkbox2" id="checkbox22" value=ck2 /> ck2<br />

<label class="control-label col-sm-4">Check Box 3</label>
    <input type="checkbox" name="checkbox3" id="checkbox31" value=ck3 /> ck3<br />
    <input type="checkbox" name="checkbox3" id="checkbox32" value=ck4 /> ck4<br />

<script>
function checkFormData() {
    if (!$('input[name=checkbox2]:checked').length > 0) {
        document.getElementById("errMessage").innerHTML = "Check Box 2 can not be null";
        return false;
    }
    if (!$('input[name=checkbox3]:checked').length > 0) {
        document.getElementById("errMessage").innerHTML = "Check Box 3 can not be null";
        return false;
    }
    alert("Success");
    return true;
}
</script>

Основна інформація: ID елементів html не повторюється (наприклад: id = "checkbox2", id = "checkbox3"). Це не є хорошою практикою. Ми можемо використовувати клас кілька разів на сторінці.
Ананд Сомашехар

1

Оскільки в середині 2019 року jQuery іноді займає заднє сидіння для таких речей, як VueJS, React тощо. Ось чистий варіант слухача ванільної завантаження Javascript:

<script>
  // Replace 'admincheckbox' both variable and ID with whatever suits.

  window.onload = function() {
    const admincheckbox = document.getElementById("admincheckbox");
    admincheckbox.addEventListener('click', function() {
      if(admincheckbox.checked){
        alert('Checked');
      } else {
        alert('Unchecked');
      }
    });
  }
</script>

0

Ваше питання не зрозуміло: ви хочете надати "ідентифікатор масиву прапорців" при вході та отримати true/falseна виході - таким чином ви не знатимете, який прапорець було встановлено (як підказує назва вашої функції). Отже нижче наведено моє тіло вашого тексту, isCheckedByIdяке на вході приймайте прапорець idі на вихідному поверненні true/false(це дуже просто, але ваш ідентифікатор не повинен бути ключовим словом),

this[id].checked


-7

використовувати код нижче

<script>

$(document).ready(function () {
  $("[id$='chkSendMail']").attr("onchange", "ShowMailSection()");
}

function ShowMailSection() {
  if ($("[id$='chkSendMail'][type='checkbox']:checked").length >0){
      $("[id$='SecEmail']").removeClass("Hide");
  }
</script>

Дійсно? Як щодо$(function() { $("[id$='chkSendMail']").on("change", ShowMailSection); });
mplungjan

І всі вони є прапорцями, тому $("[id$='chkSendMail']:checked]")має працювати просто чудово
mplungjan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.