Я хотел бы сделать что-то вроде этого, чтобы отметить checkbox, используя jQuery :

$(".myCheckBox").checked(true);

Или

$(".myCheckBox").selected(true);

Существует ли такая вещь?

4398
tpower 9 Янв 2009 в 01:20

30 ответов

Лучший ответ

Современный jQuery

Используйте .prop():

$('.myCheckbox').prop('checked', true);
$('.myCheckbox').prop('checked', false);

DOM API

Если вы работаете только с одним элементом, вы всегда можете просто получить доступ к базовому {{ X0}} и измените его .checked свойство:

$('.myCheckbox')[0].checked = true;
$('.myCheckbox')[0].checked = false;

Преимущество использования методов .prop() и .attr() вместо этого заключается в том, что они будут работать со всеми соответствующими элементами.

JQuery 1.5.x и ниже

Метод .prop() недоступен, поэтому вам необходимо использовать .attr().

$('.myCheckbox').attr('checked', true);
$('.myCheckbox').attr('checked', false);

Обратите внимание, что это подход, используемый в модульных тестах jQuery. до версии 1.6 и предпочтительнее использования $('.myCheckbox').removeAttr('checked');, поскольку последний, если флажок был изначально установлен, изменит поведение вызова на .reset() в любой форме, которая его содержит, - незначительное, но, вероятно, нежелательное изменение поведения.

Для большего контекста некоторые неполные обсуждения изменений в обработке атрибута / свойства checked при переходе с 1.5.x на 1.6 можно найти в заметки о выпуске версии 1.6 и раздел Атрибуты и свойства раздела .prop() документация.

5922
MultiplyByZer0 18 Авг 2019 в 19:04

Это, наверное, самое короткое и простое решение:

$(".myCheckBox")[0].checked = true;

Или

$(".myCheckBox")[0].checked = false;

Еще короче было бы:

$(".myCheckBox")[0].checked = !0;
$(".myCheckBox")[0].checked = !1;

Здесь также находится jsFiddle .

15
Peter Mortensen 13 Дек 2014 в 16:46

Я скучаю по решению. Я всегда буду использовать:

if ($('#myCheckBox:checked').val() !== undefined)
{
    //Checked
}
else
{
    //Not checked
}
45
Peter Mortensen 13 Дек 2014 в 16:43

Когда вы отметили флажок, как;

$('.className').attr('checked', 'checked')

Этого может быть недостаточно. Вы также должны вызвать функцию ниже;

$('.className').prop('checked', 'true')

Особенно, когда вы удалили флажок отмеченный атрибут.

13
Serhat Koroglu 5 Мар 2015 в 13:10
$('controlCheckBox').click(function(){
    var temp = $(this).prop('checked');
    $('controlledCheckBoxes').prop('checked', temp);
});
16
mahmoh 16 Июл 2013 в 02:57

Другое возможное решение:

    var c = $("#checkboxid");
    if (c.is(":checked")) {
         $('#checkboxid').prop('checked', false);
    } else {
         $('#checkboxid').prop('checked', true);
    }
20
Getz 21 Июл 2014 в 09:34

Попробуй это:

$('#checkboxid').get(0).checked = true;  //For checking

$('#checkboxid').get(0).checked = false; //For unchecking
30
Peter Mortensen 16 Фев 2013 в 10:33

Ты можешь сделать

$('.myCheckbox').attr('checked',true) //Standards compliant

Или

$("form #mycheckbox").attr('checked', true)

Если у вас есть специальный код в событии onclick для флажка, который вы хотите включить, используйте этот вместо:

$("#mycheckbox").click();

Вы можете снять галочку, удалив атрибут полностью:

$('.myCheckbox').removeAttr('checked')

Вы можете установить все флажки следующим образом:

$(".myCheckbox").each(function(){
    $("#mycheckbox").click()
});
146
Peter Mortensen 29 Дек 2011 в 18:18

Это выбирает элементы, которые имеют указанный атрибут со значением, содержащим данную подстроку "ckbItem":

$('input[name *= ckbItem]').prop('checked', true);

Он выберет все элементы, которые содержат ckbItem в своем атрибуте name.

51
Abou-Emish 18 Июл 2018 в 13:44

Вот код для проверки и снятия отметки с помощью кнопки:

var set=1;
var unset=0;
jQuery( function() {
    $( '.checkAll' ).live('click', function() {
        $( '.cb-element' ).each(function () {
            if(set==1){ $( '.cb-element' ).attr('checked', true) unset=0; }
            if(set==0){ $( '.cb-element' ).attr('checked', false); unset=1; }
        });
        set=unset;
    });
});

Обновление: здесь тот же блок кода, использующий более новый метод prop Jquery 1.6+, который заменяет attr:

var set=1;
var unset=0;
jQuery( function() {
    $( '.checkAll' ).live('click', function() {
        $( '.cb-element' ).each(function () {
            if(set==1){ $( '.cb-element' ).prop('checked', true) unset=0; }
            if(set==0){ $( '.cb-element' ).prop('checked', false); unset=1; }
        });
        set=unset;
    });
});
31
MrBoJangles 11 Апр 2017 в 15:55

Если вы используете PhoneGap разработку приложения, и у вас есть значение для кнопки, которую вы хотите отобразить мгновенно, не забудьте сделай это

$('span.ui-[controlname]',$('[id]')).text("the value");

Я обнаружил, что без пролета интерфейс не будет обновляться независимо от того, что вы делаете.

25
Peter Mortensen 16 Фев 2013 в 10:32

Чтобы проверить и снять

$('.myCheckbox').prop('checked', true);
$('.myCheckbox').prop('checked', false);
17
Theraot 3 Дек 2013 в 02:18

В jQuery,

if($("#checkboxId").is(':checked')){
    alert("Checked");
}

Или

if($("#checkboxId").attr('checked')==true){
    alert("Checked");
}

В JavaScript

if (document.getElementById("checkboxID").checked){
    alert("Checked");
}
10
Peter Mortensen 3 Апр 2014 в 21:31

Простой JavaScript очень прост и намного меньше накладных расходов:

var elements = document.getElementsByClassName('myCheckBox');
for(var i = 0; i < elements.length; i++)
{
    elements[i].checked = true;
}

Пример здесь

14
Alex W 23 Сен 2013 в 01:12

Вот полный ответ используя jQuery

Я проверяю это и он работает на 100%: D

    // when the button (select_unit_button) is clicked it returns all the checed checkboxes values 
    $("#select_unit_button").on("click", function(e){

             var arr = [];

             $(':checkbox:checked').each(function(i){
                 arr[i] = $(this).val(); // u can get id or anything else
             });

              //console.log(arr); // u can test it using this in google chrome
    });
11
user1477929user1477929 27 Фев 2013 в 15:49

Я не мог заставить это работать, используя:

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

И true, и false установили бы флажок. Что сработало для меня:

$("#cb").prop('checked', 'true'); // For checking
$("#cb").prop('checked', '');     // For unchecking
13
Mark Amery 15 Дек 2014 в 18:44

Вот способ сделать это без JQuery

function addOrAttachListener(el, type, listener, useCapture) {
  if (el.addEventListener) {
    el.addEventListener(type, listener, useCapture);
  } else if (el.attachEvent) {
    el.attachEvent("on" + type, listener);
  }
};

addOrAttachListener(window, "load", function() {
  var cbElem = document.getElementById("cb");
  var rcbElem = document.getElementById("rcb");
  addOrAttachListener(cbElem, "click", function() {
    rcbElem.checked = cbElem.checked;
  }, false);
}, false);
<label>Click Me!
  <input id="cb" type="checkbox" />
</label>
<label>Reflection:
  <input id="rcb" type="checkbox" />
</label>
37
Xitalogy 10 Май 2016 в 09:58

Как сказал @ livefree75:

jQuery 1.5.x и ниже

Вы также можете расширить объект $ .fn новыми методами:

(function($)  {
   $.fn.extend({
      check : function()  {
         return this.filter(":radio, :checkbox").attr("checked", true);
      },
      uncheck : function()  {
         return this.filter(":radio, :checkbox").removeAttr("checked");
      }
   });
}(jQuery));

Но в новых версиях jQuery мы должны использовать что-то вроде этого:

jQuery 1.6 +

    (function($)  {
       $.fn.extend({
          check : function()  {
             return this.filter(":radio, :checkbox").prop("checked", true);
          },
          uncheck : function()  {
             return this.filter(":radio, :checkbox").prop("checked",false);
          }
       });
    }(jQuery));

Тогда вы можете просто сделать:

    $(":checkbox").check();
    $(":checkbox").uncheck();
19
Peter Mortensen 21 Май 2017 в 11:00

Знайте об утечках памяти в Internet Explorer до Internet Explorer 9, как Состояния документации jQuery:

В Internet Explorer до версии 9 использование .prop () для установки для свойства элемента DOM чего-либо, кроме простого примитивного значения (число, строка или логическое значение), может привести к утечкам памяти, если свойство не удалено (с помощью .removeProp ( )) до того, как элемент DOM будет удален из документа. Чтобы безопасно установить значения для объектов DOM без утечек памяти, используйте .data ().

18
Peter Mortensen 22 Ноя 2014 в 15:33

Вот код и демонстрация того, как установить несколько флажков ...

http://jsfiddle.net/tamilmani/z8TTt/

$("#check").on("click", function () {

    var chk = document.getElementById('check').checked;
    var arr = document.getElementsByTagName("input");

    if (chk) {
        for (var i in arr) {
            if (arr[i].name == 'check') arr[i].checked = true;
        }
    } else {
        for (var i in arr) {
            if (arr[i].name == 'check') arr[i].checked = false;
        }
    }
});
25
Joaquinglezsantos 10 Фев 2016 в 13:18

Это правильный способ проверки и снятия флажков с помощью jQuery, так как это кроссплатформенный стандарт, и будет разрешать перепосты формы.

$('.myCheckBox').each(function(){ this.checked = true; });

$('.myCheckBox').each(function(){ this.checked = false; });

Делая это, вы используете стандарты JavaScript для проверки и снятия флажков, поэтому любой браузер, который должным образом реализует свойство «флажок» элемента флажок, будет запускать этот код без нареканий. Это должно быть всеми основными браузерами, но я не могу протестировать предыдущий Internet Explorer 9.

Проблема (jQuery 1.6):

Как только пользователь нажимает на флажок, этот флажок перестает отвечать на изменения атрибута «флажок».

Вот пример атрибута checkbox, не выполняющего работу после того, как кто-то щелкнул флажок (это происходит в Chrome).

Fiddle

Решение .

Используя свойство JavaScript «флажок» в DOM элементах, мы можем решить проблему напрямую, вместо того, чтобы пытаться манипулировать DOM делать то, что мы хотим делать.

скрипка

Этот плагин будет изменять свойство selected любых элементов, выбранных jQuery, и успешно устанавливать и снимать флажки при любых обстоятельствах. Таким образом, хотя это может показаться чрезмерным решением, оно улучшит пользовательский интерфейс вашего сайта и поможет предотвратить разочарование пользователей.

(function( $ ) {
    $.fn.checked = function(value) {
        if(value === true || value === false) {
            // Set the value of the checkbox
            $(this).each(function(){ this.checked = value; });
        } 
        else if(value === undefined || value === 'toggle') {
            // Toggle the checkbox
            $(this).each(function(){ this.checked = !this.checked; });
        }

        return this;
    };
})( jQuery );

В качестве альтернативы, если вы не хотите использовать плагин, вы можете использовать следующие фрагменты кода:

// Check
$(':checkbox').prop('checked', true);

// Un-check
$(':checkbox').prop('checked', false);

// Toggle
$(':checkbox').prop('checked', function (i, value) {
    return !value;
});
314
RevanthKrishnaKumar V. 31 Июл 2015 в 13:43

Мы можем использовать elementObject с jQuery для проверки атрибута:

$(objectElement).attr('checked');

Мы можем использовать это для всех версий jQuery без каких-либо ошибок.

Обновление: Jquery 1.6+ имеет новый метод поддержки, который заменяет attr, например:

$(objectElement).prop('checked');
29
MrBoJangles 11 Апр 2017 в 15:53

Для jQuery 1.6+

$('.myCheckbox').prop('checked', true);
$('.myCheckbox').prop('checked', false);

Для jQuery 1.5.x и ниже

$('.myCheckbox').attr('checked', true);
$('.myCheckbox').attr('checked', false);

Проверить,

$('.myCheckbox').removeAttr('checked');
18
logan 21 Апр 2015 в 10:29

Предполагая, что вопрос ...

Как проверить, установлен ли флажок ПО ЗНАЧЕНИЮ?

Помните, что в типичном наборе флажков все входные теги имеют одинаковое имя, они отличаются атрибутом value : для каждого входа набора нет идентификатора.

Ответ Сианя можно расширить с помощью более конкретного селектора , используя следующую строку кода:

$("input.myclass[name='myname'][value='the_value']").prop("checked", true);
45
5 revs, 3 users 74% 9 Июн 2014 в 15:07

Использование:

$(".myCheckbox").attr('checked', true); // Deprecated
$(".myCheckbox").prop('checked', true);

И если вы хотите проверить, установлен ли флажок или нет:

$('.myCheckbox').is(':checked');
700
Peter Mortensen 18 Мар 2015 в 18:34

Чтобы установить флажок, вы должны использовать

 $('.myCheckbox').attr('checked',true);

Или

 $('.myCheckbox').attr('checked','checked');

И чтобы снять флажок, вы всегда должны установить его в false:

 $('.myCheckbox').attr('checked',false);

Если вы делаете

  $('.myCheckbox').removeAttr('checked')

Он удаляет атрибут все вместе, и поэтому вы не сможете сбросить форму.

BAD DEMO jQuery 1.6. Я думаю, что это сломано. Для 1.6 я собираюсь сделать новый пост об этом.

NEW WORKING DEMO jQuery 1.5.2 работает в Chrome.

Обе демонстрации используют

$('#tc').click(function() {
    if ( $('#myCheckbox').attr('checked')) {
        $('#myCheckbox').attr('checked', false);
    } else {
        $('#myCheckbox').attr('checked', 'checked');
    }
});
62
Peter Mortensen 29 Дек 2011 в 18:21

Если вы используете мобильный телефон, и вы хотите, чтобы интерфейс обновлялся и отображал флажок как непроверенный, используйте следующее:

$("#checkbox1").prop('checked', false).checkboxradio("refresh");
18
Matt Peacock 11 Янв 2013 в 13:05

Чтобы установить флажок с помощью jQuery 1.6 или выше, просто сделайте следующее:

checkbox.prop('checked', true);

Чтобы снять отметку, используйте:

checkbox.prop('checked', false);

Вот что мне нравится использовать для переключения флажка с помощью jQuery:

checkbox.prop('checked', !checkbox.prop('checked'));

Если вы используете jQuery 1.5 или ниже:

checkbox.attr('checked', true);

Чтобы снять отметку, используйте:

checkbox.attr('checked', false);
42
Ramon de Jesus 9 Май 2017 в 13:23
$("#mycheckbox")[0].checked = true;
$("#mycheckbox").attr('checked', true);
$("#mycheckbox").click();

Последний вызовет событие click для флажка, остальные - нет. Поэтому, если у вас есть специальный код в событии onclick для флажка, который вы хотите включить, используйте последний.

64
Chris Brandsma 3 Фев 2009 в 17:06

Вы также можете расширить объект $ .fn новыми методами:

(function($)  {
   $.fn.extend({
      check : function()  {
         return this.filter(":radio, :checkbox").attr("checked", true);
      },
      uncheck : function()  {
         return this.filter(":radio, :checkbox").removeAttr("checked");
      }
   });
}(jQuery));

Тогда вы можете просто сделать:

$(":checkbox").check();
$(":checkbox").uncheck();

Или вы можете дать им более уникальные имена, такие как mycheck () и myuncheck (), если вы используете какую-то другую библиотеку, которая использует эти имена.

80
livefree75 20 Авг 2010 в 18:19