Як встановити всі прапорці за допомогою jQuery?


119

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

Спочатку я намагався використовувати, attrа потім намагався, propале я щось роблю не так.

Я спробував це спочатку:

$("#checkAll").change(function(){

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

Але це не спрацювало.

Далі: Це працювало краще, ніж вище код

$("#checkAll").change(function(){

  if (! $('input:checkbox').is('checked')) {
      $('input:checkbox').prop('checked',true);
  } else {
      $('input:checkbox').prop('checked', false);
  }       
});

Обидва приклади не працюють.

JSFiddle: http://jsfiddle.net/hhZfu/4/


можливий дублікат .prop () vs .attr ()
Ліам


1
ось посилання на мій кодек, який робить саме цей codepen.io/nickhq/pen/pZJVEr
Ніксон Косгей

Відповіді:


295

Вам потрібно використовувати .prop (), щоб встановити перевірену властивість

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

Демо: Fiddle


1
Дякую за швидку відповідь. Це добре працює, але в моєму додатку у мене є одна підроблена перевірка. коли я оновлюю сторінку ctrl+rі натискаю прапорець, checkAllвін не перевіряє мене всіх. Після цього я повинен перевірити ще раз, щоб бути успішним. Тож мені потрібно 2 рази натиснути на checkAllким, що не працюють одним натисканням (одним)? Я копіюю вставте цей код і виконую функцію, checkAll()і я встановив прапорецьonclick="return checkAll()"
Іван

3
Якщо ви збираєтеся використовувати jQuery, тоді використовуйте jQuery. Недоцільно поєднувати jQuery з вбудованим Javascript. Наприклад, це погано: <elementtag id="someID" onclick="javascript code here"--- Натомість використовуйте jQuery:$('#someID').click(function() { checkAll() });
cssyphus

4
Яка різниця між вашим дописом у цій відповіді, чому використовується not(this).prop?
shaijut

1
@ArunPJohny, ідентифікатор повинен бути унікальним на одній сторінці, як ми можемо використовувати ту саму функцію на прикладі класу jsfiddle.net/52uny55w
Krishna Jonnalagadda

@ArunPJohny, дякую за ваш час. Я хочу дізнатися багато
цікавого

44

Просто використовуйте checkedвластивість checkAllі використовуйте use prop () замість attr для перевіреної властивості

Демонстраційна демонстрація

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

Використовуйте prop () замість attr () для таких властивостей, як перевірено

Станом на jQuery 1.6, метод .attr () повертає невизначений для атрибутів, які не були встановлені. Для отримання та зміни властивостей DOM, таких як перевірений, вибраний або вимкнений стан елементів форми, використовуйте метод .prop ()

У вас такий самий ідентифікатор для прапорців, і його має бути унікальним . Краще використовувати якийсь клас із залежними прапорцями, щоб він не включав прапорці, які ви не хочете. Як $('input:checkbox')буде встановлено всі прапорці на сторінці. Якщо ваша сторінка буде розширена новими прапорцями, вони також будуть вибрані / зняті. Що може бути не задуманою поведінкою.

Демонстраційна демонстрація

$('#checkAll').click(function () {    
    $(':checkbox.checkItem').prop('checked', this.checked);    
});

42

Повне рішення тут.

$(document).ready(function() {
    $("#checkedAll").change(function() {
        if (this.checked) {
            $(".checkSingle").each(function() {
                this.checked=true;
            });
        } else {
            $(".checkSingle").each(function() {
                this.checked=false;
            });
        }
    });

    $(".checkSingle").click(function () {
        if ($(this).is(":checked")) {
            var isAllChecked = 0;

            $(".checkSingle").each(function() {
                if (!this.checked)
                    isAllChecked = 1;
            });

            if (isAllChecked == 0) {
                $("#checkedAll").prop("checked", true);
            }     
        }
        else {
            $("#checkedAll").prop("checked", false);
        }
    });
});

Html має бути:

Одномісний прапорець у трьох встановлених прапорець буде встановлено та зніміть позначку.

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

<input type="checkbox" name="checkAll" class="checkSingle" />
<input type="checkbox" name="checkAll" class="checkSingle" />
<input type="checkbox" name="checkAll" class="checkSingle" />

Сподіваюся, це допомагає комусь, як це було для мене.

JS Fiddle https://jsfiddle.net/52uny55w/


3
Мені подобається це рішення, оскільки якщо ви знімете одну з полів, прапорець "Перевірити все" також не знімається. Так само, якщо ви вручну перевіряєте всі відповідні поля, також буде встановлено прапорець "Перевірити все". Це чудовий зворотний зв’язок інтерфейсу користувача!
HPWD

Ви можете $("#checkedAll").changeскоротити функцію, змінивши її на:var val = this.checked; $(".checkSingle").each( function() { this.checked=val; });
Gellie Ann,

Крім того, я думаю, що краще перейменовувати isAllCheckedзмінну в isThereUncheckedабо unCheckedтак, вона буде більш описовою для того, для чого використовувалася ця змінна.
Геллі Енн

Я прийняв це рішення, ось що я шукаю подяки
Аджай Кумар,

10

Я думаю, коли користувач вибирає всі прапорці вручну, тоді реєстрація повинна бути встановлена ​​автоматично або користувач зніме одну з них із усіх вибраних прапорців, тоді реєстрація повинна бути відмінена автоматично. ось мій код ..

$('#checkall').change(function () {
    $('.cb-element').prop('checked',this.checked);
});

$('.cb-element').change(function () {
 if ($('.cb-element:checked').length == $('.cb-element').length){
  $('#checkall').prop('checked',true);
 }
 else {
  $('#checkall').prop('checked',false);
 }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<input type="checkbox" name="all" id="checkall" />Check All</br>
<input type="checkbox" class="cb-element" /> Checkbox  1</br>
<input type="checkbox" class="cb-element" /> Checkbox  2</br>
<input type="checkbox" class="cb-element" /> Checkbox  3


Дякую! Я вважаю за краще це, оскільки після того, як ми встановимо прапорець біля цього прапорця, ми знімемо прапорець біля всіх пунктів.
Ріцкі Н. Ассьоуфі

7

Чому б вам не спробувати це (у другому рядку, де 'form #' вам потрібно поставити правильний селектор вашої html форми):

$('.checkAll').click(function(){
    $('form#myForm input:checkbox').each(function(){
        $(this).prop('checked',true);
   })               
});

$('.uncheckAll').click(function(){
    $('form#myForm input:checkbox').each(function(){
        $(this).prop('checked',false);
   })               
});

Ваш HTML повинен бути таким:

<form id="myForm">
      <span class="checkAll">checkAll</span>
      <span class="uncheckAll">uncheckAll</span>
      <input type="checkbox" class="checkSingle"></input>
      ....
</form>

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


5

HTML:

<p><input type="checkbox" id="parent" /> Check/Uncheck All</p>
<ul>
  <li>
    <input type="checkbox" class="child" /> Checkbox 1</li>
  <li>
    <input type="checkbox" class="child" /> Checkbox 2</li>
  <li>
    <input type="checkbox" class="child" /> Checkbox 3</li>
</ul>

jQuery:

$(document).ready(function() {
  $("#parent").click(function() {
    $(".child").prop("checked", this.checked);
  });

  $('.child').click(function() {
    if ($('.child:checked').length == $('.child').length) {
      $('#parent').prop('checked', true);
    } else {
      $('#parent').prop('checked', false);
    }
  });
});

Демо: FIDDLE



2
$('#checkAll').on('change', function(){
    if($(this).attr('checked')){
        $('input[type=checkbox]').attr('checked',true);
    }
    else{
        $('input[type=checkbox]').removeAttr('checked');
    }
});

1

Один прапорець, щоб керувати ними

Для людей, які все ще шукають плагін, щоб керувати прапорцями через легкий, має нестандартну підтримку UniformJS та iCheck, і він не знімається, коли принаймні один з контрольованих прапорців не встановлено (і перевіряється, коли всі контрольовані прапорці встановлені звичайно) Я створив плагін jQuery checkAll .

Сміливо переглядайте приклади на сторінці документації .


Для цього питання, наприклад, потрібно лише:

$( "#checkAll" ).checkall({
    target: "input:checkbox"
});

Хіба це не ясно і просто?


1
    <p id="checkAll">Check All</p>
<hr />
<input type="checkbox" class="checkItem">Item 1
<input type="checkbox" class="checkItem">Item 2
<input type="checkbox" class="checkItem">Item3

І jquery

$(document).on('click','#checkAll',function () {
     $('.checkItem').not(this).prop('checked', this.checked);
 });

1

Ви можете працювати безпосередньо .prop()над результатами селектора jQuery, навіть якщо він повертає більше одного результату. Так:

$("input[type='checkbox']").prop('checked', true)


0

Зазвичай ви також хочете, щоб головний прапорець не знімався, якщо принаймні 1 підлеглий прапорець не встановлено, і його потрібно встановити, якщо всі встановлені прапорці встановлені:

/**
 * Checks and unchecks checkbox-group with a master checkbox and slave checkboxes
 * @param masterId is the id of master checkbox
 * @param slaveName is the name of slave checkboxes
 */
function checkAll(masterId, slaveName) {
    $master = $('#' + masterId);
    $slave = $('input:checkbox[name=' + slaveName + ']');

    $master.click(function(){
        $slave.prop('checked', $(this).prop('checked'));
        $slave.trigger('change');
    });

    $slave.change(function() {
        if ($master.is(':checked') && $slave.not(':checked').length > 0) {
            $master.prop('checked', false);
        } else if ($master.not(':checked') && $slave.not(':checked').length == 0) {
        $master.prop('checked', 'checked');
    }
    });
}

І якщо ви хочете ввімкнути будь-яке управління (наприклад, Remove Allкнопку чи Add Somethingкнопку), коли принаймні один прапорець встановлений, і вимкнути його, якщо не встановлено прапорець:

/**
 * Checks and unchecks checkbox-group with a master checkbox and slave checkboxes,
 * enables or disables a control when a checkbox is checked
 * @param masterId is the id of master checkbox
 * @param slaveName is the name of slave checkboxes
 */
function checkAllAndSwitchControl(masterId, slaveName, controlId) {
    $master = $('#' + masterId);
    $slave = $('input:checkbox[name=' + slaveName + ']');

    $master.click(function(){
        $slave.prop('checked', $(this).prop('checked'));
        $slave.trigger('change');
    });

    $slave.change(function() {
        switchControl(controlId, $slave.filter(':checked').length > 0);
        if ($master.is(':checked') && $slave.not(':checked').length > 0) {
            $master.prop('checked', false);
        } else if ($master.not(':checked') && $slave.not(':checked').length == 0) {
        $master.prop('checked', 'checked');
    }
    });
}

/**
 * Enables or disables a control
 * @param controlId is the control-id
 * @param enable is true, if control must be enabled, or false if not
 */
function switchControl(controlId, enable) {
    var $control = $('#' + controlId);
    if (enable) {
        $control.removeProp('disabled');
    } else {
        $control.prop('disabled', 'disabled');
    }
}

0

HTML

<HTML>
<HEAD>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
    <TITLE>Multiple Checkbox Select/Deselect - DEMO</TITLE>
</HEAD>
<BODY>
    <H2>Multiple Checkbox Select/Deselect - DEMO</H2>
<table border="1">
<tr>
    <th><input type="checkbox" id="selectall"/></th>
    <th>Cell phone</th>
    <th>Rating</th>
</tr>
<tr>
    <td align="center"><input type="checkbox" class="case" name="case" value="1"/></td>
    <td>BlackBerry Bold 9650</td>
    <td>2/5</td>
</tr>
<tr>
    <td align="center"><input type="checkbox" class="case" name="case" value="2"/></td>
    <td>Samsung Galaxy</td>
    <td>3.5/5</td>
</tr>
<tr>
    <td align="center"><input type="checkbox" class="case" name="case" value="3"/></td>
    <td>Droid X</td>
    <td>4.5/5</td>
</tr>
<tr>
    <td align="center"><input type="checkbox" class="case" name="case" value="4"/></td>
    <td>HTC Desire</td>
    <td>3/5</td>
</tr>
<tr>
    <td align="center"><input type="checkbox" class="case" name="case" value="5"/></td>
    <td>Apple iPhone 4</td>
    <td>5/5</td>
</tr>
</table>

</BODY>
</HTML>

Код jQuery

<SCRIPT language="javascript">
$(function(){

    // add multiple select / deselect functionality
    $("#selectall").click(function () {
          $('.case').attr('checked', this.checked);
    });

    // if all checkbox are selected, check the selectall checkbox
    // and viceversa
    $(".case").click(function(){

        if($(".case").length == $(".case:checked").length) {
            $("#selectall").attr("checked", "checked");
        } else {
            $("#selectall").removeAttr("checked");
        }

    });
});
</SCRIPT>

Переглянути демонстраційну версію

Натисніть тут, щоб переглянути демонстрацію


0

використовувати .prop (), щоб отримати значення властивості

$("#checkAll").change(function () {
    $("input:checkbox").prop('checked', $(this).prop("checked"));
});

0

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

я постарався з усіх сил

/*----------------------------------------
 *  Check and uncheck checkbox which will global
 *  Params : chk_all_id=id of main checkbox which use for check all dependant, chk_child_pattern=start pattern of the remain checkboxes 
 *  Developer Guidline : For to implement this function Developer need to just add this line inside checkbox {{ class="check_all" dependant-prefix-id="PATTERN_WHATEVER_U_WANT" }}
 ----------------------------------------*/
function checkUncheckAll(chk_all_cls,chiled_patter_key){
    if($("."+chk_all_cls).prop('checked') == true){
        $('input:checkbox[id^="'+chiled_patter_key+'"]').prop('checked', 'checked');
    }else{
        $('input:checkbox[id^="'+chiled_patter_key+'"]').removeProp('checked', 'checked');
    }        
}

if($(".check_all").get(0)){
    var chiled_patter_key = $(".check_all").attr('dependant-prefix-id');

    $(".check_all").on('change',function(){        
        checkUncheckAll('check_all',chiled_patter_key);
    });

    /*------------------------------------------------------
     * this will remain checkbox checked if already checked before ajax call! :)
     ------------------------------------------------------*/
    $(document).ajaxComplete(function() {
        checkUncheckAll('check_all',chiled_patter_key);
    });
}

Сподіваюся, це допоможе!


0
function checkAll(class_name) {
    $("." + class_name).each(function () { 
        if (this.checked == true) 
            this.checked = false; 
        else 
            this.checked = true; 
    }); 
}

0

checkall - ідентифікатор вікна allcheck, а cb-child - це ім'я кожного прапорця, який буде перевірятись та невірно залежати від події клацання checkall

$("#checkall").click(function () {
                        if(this.checked){
                            $("input[name='cb-child']").each(function (i, el) {
                                el.setAttribute("checked", "checked");
                                el.checked = true;
                                el.parentElement.className = "checked";

                            });
                        }else{
                            $("input[name='cb-child']").each(function (i, el) {
                                el.removeAttribute("checked");
                                el.parentElement.className = "";
                            });
                        }
                    });

0

* СКРИПТ JAVA ВИБІР ВСЕ КОНТРОЛЬНОЇ КОРИГИ

Найкраще рішення .. Спробуйте

<script type="text/javascript">
        function SelectAll(Id) {
            //get reference of GridView control
            var Grid = document.getElementById("<%= GridView1.ClientID %>");
            //variable to contain the cell of the Grid
            var cell;

            if (Grid.rows.length > 0) {
                //loop starts from 1. rows[0] points to the header.
                for (i = 1; i < grid.rows.length; i++) {
                    //get the reference of first column
                    cell = grid.rows[i].cells[0];

                    //loop according to the number of childNodes in the cell
                    for (j = 0; j < cell.childNodes.length; j++) {
                        //if childNode type is CheckBox                 
                        if (cell.childNodes[j].type == "checkbox") {
                            //Assign the Status of the Select All checkbox to the cell checkbox within the Grid
                            cell.childNodes[j].checked = document.getElementById(Id).checked;
                        }
                    }
                }
            }
        }
    </script>

-1

Ви можете використовувати нижче простий код:

function checkDelBoxes(pForm, boxName, parent)
{
    for (i = 0; i < pForm.elements.length; i++)
        if (pForm.elements[i].name == boxName)
            pForm.elements[i].checked = parent;
}

Приклад використання:

<a href="javascript:;" onclick="javascript:checkDelBoxes($(this).closest('form').get(0), 'CheckBox[]', true);return false;"> Select All
</a>
<a href="javascript:;" onclick="javascript:checkDelBoxes($(this).closest('form').get(0), 'CheckBox[]', false);return false;"> Unselect All
</a>

-1
if(isAllChecked == 0)
{ 
    $("#select_all").prop("checked", true); 
}   

будь ласка, змініть цей рядок на

if(isAllChecked == 0)
{ 
    $("#checkedAll").prop("checked", true); 
}   

у відповідь ССР та її ідеально працює. Дякую


-1
if($('#chk_all').is(":checked"))
 {
    $('#'+id).attr('checked', true);
 }
else
 {
    $('#'+id).attr('checked', false);
 }  

Було б корисно, якби ви пояснили відповідь.
енкор

якщо ви встановите прапорець, то всі прапорці будуть встановлені як ідентифікатор, а потім ви зніміть прапорець, тоді всі прапорці не встановлені
Dsu Menaria


-1

html:

    <div class="col-md-3 general-sidebar" id="CategoryGrid">
                                                    <h5>Category &amp; Sub Category <span style="color: red;">* </span></h5>
                                                    <div class="checkbox">
                                                        <label>
                                                            <input onclick="checkUncheckAll(this)" type="checkbox">
                                                            All
                                                        </label>
                                                    </div>
                                                <div class="checkbox"><label><input class="cat" type="checkbox" value="Quality">Quality</label></div>
<div class="checkbox"><label><input class="subcat" type="checkbox" value="Planning process and execution">Planning process and execution</label></div>

javascript:

function checkUncheckAll(ele) {
    if (ele.checked) {
        $('.cat').prop('checked', ele.checked);
        $('.subcat').prop('checked', ele.checked);
    }
    else {
        $('.cat').prop('checked', ele.checked);
        $('.subcat').prop('checked', ele.checked);
    }
}

-1
            <pre>
            <SCRIPT language="javascript">
            $(function(){
                // add multiple select / deselect functionality
                $("#selectall").click(function () {
                      $('.case').attr('checked', this.checked);
                });

                // if all checkbox are selected, check the selectall checkbox
                // and viceversa
                $(".case").click(function(){

                    if($(".case").length == $(".case:checked").length) {
                        $("#selectall").attr("checked", "checked");
                    } else {
                        $("#selectall").removeAttr("checked");
                    }

                });
            });
            </SCRIPT>
            <HTML>
            <HEAD>
            <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
            <TITLE>Multiple Checkbox Select/Deselect - DEMO</TITLE>
            </HEAD>
            <BODY>
            <H2>Multiple Checkbox Select/Deselect - DEMO</H2>
            <table border="1">
              <tr>
                <th><input type="checkbox" id="selectall"/></th>
                <th>Cell phone</th>
                <th>Rating</th>
              </tr>
              <tr>
                <td align="center"><input type="checkbox" class="case" name="case" value="1"/></td>
                <td>BlackBerry Bold 9650</td>
                <td>2/5</td>
              </tr>
              <tr>
                <td align="center"><input type="checkbox" class="case" name="case" value="2"/></td>
                <td>Samsung Galaxy</td>
                <td>3.5/5</td>
              </tr>
              <tr>
                <td align="center"><input type="checkbox" class="case" name="case" value="3"/></td>
                <td>Droid X</td>
                <td>4.5/5</td>
              </tr>
              <tr>
                <td align="center"><input type="checkbox" class="case" name="case" value="4"/></td>
                <td>HTC Desire</td>
                <td>3/5</td>
              </tr>
              <tr>
                <td align="center"><input type="checkbox" class="case" name="case" value="5"/></td>
                <td>Apple iPhone 4</td>
                <td>5/5</td>
              </tr>
            </table>
            </BODY>
            </HTML>
            </pre>

помилка сценарію в коді. сценарій потрібно завантажити спочатку.
Satish Shetty

-1
function chek_al_indi(id)
{
    var k = id;
    var cnt_descriptiv_indictr = eval($('#cnt_descriptiv_indictr').val());
    var std_cnt = 10;

    if ($('#'+ k).is(":checked"))
    {
        for (var i = 1; i <= std_cnt; i++)  
        {
            $("#chk"+ k).attr('checked',true);  
            k = k + cnt_descriptiv_indictr;
        }
    }

    if ($('#'+ k).is(":not(:checked)"))
    {
        for (var i = 1; i <= std_cnt; i++)  
        {
            $("#chk"+ k).attr('checked',false);     
            k = k + cnt_descriptiv_indictr;
        }       
    }
}

Чому тривала функція?
Jimmy Obonyo Abor

-2

Тригер клацання

$("#checkAll").click(function(){
    $('input:checkbox').click();
});

АБО

$("#checkAll").click(function(){
    $('input:checkbox').trigger('click');
});

АБО

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