Как реализовать флажок "выбрать все" в HTML?

У меня есть HTML-страница с несколькими флажками.

Мне нужен еще один флажок с названием «выбрать все». Когда я устанавливаю этот флажок, все флажки на странице HTML должны быть установлены. Как я могу это сделать?

Если вы хотите выполнить постепенную деградацию, выбор «выбрать все» должен фактически означать, что все выбраны независимо от их индивидуального состояния. (посещение вашей страницы с отключенным javascript)

some 22.12.2008 20:09

В Firefox (и, возможно, других?): Нажмите CTRL+SHIFT+K, чтобы открыть консоль, затем вставить: $("input:checkbox").attr('checked', true) и нажмите Enter. Теперь все флажки на текущей странице должны быть отмечены. Чтобы снять отметку заменить True на False.

ashleedawg 11.12.2018 17:45
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
240
2
649 200
30

Ответы 30

JavaScript - ваш лучший выбор. Ссылка ниже дает пример использования кнопок для отмены / выбора всего. Вы можете попытаться адаптировать его для использования флажка, просто используйте флажок «Выбрать все» в атрибуте onClick.

Функция Javascript для установки или снятия всех флажков

На этой странице есть более простой пример

http://www.htmlcodetutorial.com/forms/_INPUT_onClick.html

<script language = "JavaScript">
function toggle(source) {
  checkboxes = document.getElementsByName('foo');
  for(var checkbox in checkboxes)
    checkbox.checked = source.checked;
}
</script>

<input type = "checkbox" onClick = "toggle(this)" /> Toggle All<br/>

<input type = "checkbox" name = "foo" value = "bar1"> Bar 1<br/>
<input type = "checkbox" name = "foo" value = "bar2"> Bar 2<br/>
<input type = "checkbox" name = "foo" value = "bar3"> Bar 3<br/>
<input type = "checkbox" name = "foo" value = "bar4"> Bar 4<br/>

Обновлено:

Конструкция for each...in не работает, по крайней мере, в этом случае, в Safari 5 или Chrome 5. Этот код должен работать во всех браузерах:

function toggle(source) {
  checkboxes = document.getElementsByName('foo');
  for(var i=0, n=checkboxes.length;i<n;i++) {
    checkboxes[i].checked = source.checked;
  }
}

для каждого (флажок var в флажках) --------------------------------------- должен: для (флажок var в флажках)

HelloWorld 16.06.2010 09:14

@HelloWorld: для каждого ... in на самом деле действителен Javascript: developer.mozilla.org/en/Core_JavaScript_1.5_Reference/… Но, как указал porneL, это непонятная конструкция. Также этот код не работает в Safari 5 или Chrome 5. Он работает в FF 3.6 и IIRC, он работал в Safari 4. for(var i in checkboxes) checkboxes[i].checked = source.checked работает во всех браузерах.

Can Berk Güder 16.06.2010 15:18

Если вы применяете это для jquery, помните, что исходная переменная становится классом EventHandler для событий щелчка, поэтому вам необходимо указать целевой объект для работы проверенной команды. Смотрите мой ответ ниже.

khylo 06.07.2011 15:37

@ CanBerkGüder Что, если бы вы хотели установить все флажки на одной странице? Один отметьте все, чтобы управлять одним набором флажков, а другой отметьте все, чтобы контролировать другой набор.

Rob 29.09.2011 20:06

Никогда не используйте for in с коллекцией или массивом

mplungjan 06.04.2013 10:59

У меня возникла проблема с использованием этого кода. Мне пришлось изменить имя функции.

Will 18.07.2013 13:13

для получения полного ответа мне интересно, как бы вы сняли флажок «Переключить все» в случае, если: (1) Переключить все отмечено; (2) какой-либо из флажков, где name = "foo" не отмечен?

scagnetti 30.09.2015 23:11

Почему вы делаете , n=checkboxes.length;i<n, а не просто i < checkboxes.length? В любом случае, чтобы сделать функцию универсальной (повторное использование кода), передайте дополнительный параметр: (source, checkboxes_name) и сделайте document.getElementsByName(checkboxes_name);. Это лучше, чем жестко задавать имя и делать функцию специфичной для определенного набора флажков.

ADTC 02.04.2016 07:39

У всех флажков одинаковое имя? Как отличить их друг от друга после публикации формы?

Giorgio Barchiesi 05.05.2016 18:25

@mplungjan есть ли какие-то веские доводы в пользу вашей рекомендации или это просто предпочтение?

Typel 25.05.2016 21:55

@ Тип, например: stackoverflow.com/questions/500504/…

mplungjan 25.05.2016 21:57

@ADTC Хорошей практикой является установка переменной на длину массива, чтобы исключить возможность бесконечного цикла. Если где-то в вашем цикле вы добавите еще один флажок, цикл никогда не закончится, так как длина всегда увеличивается.

Craig 02.07.2016 13:03

Всегда объявлять локальные переменные

zeros-and-ones 12.09.2016 08:30

Хорошо, так как мое изменение было отклонено по какой-то причине, я думаю, что я здесь прокомментирую. Конструкция for-each устарела, и не будет работать! Вы должны использовать ее замену: for(let checkbox of checkboxes).

forresthopkinsa 03.02.2017 22:07

Я просто хотел бы указать, что наличие нескольких флажков с одним и тем же именем является недопустимым html. Он служит для демонстрации функциональности здесь, но это очень популярный вопрос, было бы разумно (для неопытных будущих читателей) использовать другой селектор (например, чтобы назначить класс всем флажкам, которые мы хотим обрабатывать таким образом).

El_Vanja 03.12.2020 12:05

Используя jQuery:

// Listen for click on toggle checkbox
$('#select-all').click(function(event) {   
    if (this.checked) {
        // Iterate each checkbox
        $(':checkbox').each(function() {
            this.checked = true;                        
        });
    } else {
        $(':checkbox').each(function() {
            this.checked = false;                       
        });
    }
});

HTML:

<input type = "checkbox" name = "checkbox-1" id = "checkbox-1" />
<input type = "checkbox" name = "checkbox-2" id = "checkbox-2" />
<input type = "checkbox" name = "checkbox-3" id = "checkbox-3" />

<!-- select all boxes -->
<input type = "checkbox" name = "select-all" id = "select-all" />

я бы добавил предложение else для обработки варианта использования отмены выбора, ;-) .. else {// Итерация каждого флажка $ (": checkbox"). each (function () {this.checked = false;}); }

emeraldjava 08.07.2010 18:47

Если вы хотите опустить if и else и по-прежнему обрабатывать снятие выделения, вы можете сделать это следующим образом: var state = this.checked; $ (': флажок'). each (function () {this.checked = state;});

Assil 14.10.2015 21:12

Вы можете упростить это до $(':checkbox').prop('checked', true); и $(':checkbox').prop('checked', false);

RedDragonWebDesign 30.07.2020 08:13

Если вы принимаете верхний ответ для jQuery, помните, что объект, переданный в функцию щелчка, является EventHandler, а не исходным объектом флажка. Поэтому код следует изменить следующим образом.

HTML

<input type = "checkbox" name = "selectThemAll"/> Toggle All<br/>

<input type = "checkbox" name = "foo" value = "bar1"> Bar 1<br/>
<input type = "checkbox" name = "foo" value = "bar2"> Bar 2<br/>
<input type = "checkbox" name = "foo" value = "bar3"> Bar 3<br/>
<input type = "checkbox" name = "foo" value = "bar4"> Bar 4<br/>

Javascript

$(function() {
    jQuery("[name=selectThemAll]").click(function(source) { 
        checkboxes = jQuery("[name=foo]");
        for(var i in checkboxes){
            checkboxes[i].checked = source.target.checked;
        }
    });
})

не только неправильный первый тип ввода, но даже после его исправления это не сработало для меня

Error Messages 28.02.2020 06:30
<asp:CheckBox ID = "CheckBox1" runat = "server" Text = "Select All" onclick = "checkAll(this);" />
<br />
<asp:CheckBoxList ID = "CheckBoxList1" runat = "server">
    <asp:ListItem Value = "Item 1">Item 1</asp:ListItem>
    <asp:ListItem Value = "Item 2">Item 2</asp:ListItem>
    <asp:ListItem Value = "Item 3">Item 3</asp:ListItem>
    <asp:ListItem Value = "Item 4">Item 4</asp:ListItem>
    <asp:ListItem Value = "Item 5">Item 5</asp:ListItem>
    <asp:ListItem Value = "Item 6">Item 6</asp:ListItem>
</asp:CheckBoxList>

<script type = "text/javascript">
    function checkAll(obj1) {
        var checkboxCollection = document.getElementById('<%=CheckBoxList1.ClientID %>').getElementsByTagName('input');

        for (var i = 0; i < checkboxCollection.length; i++) {
            if (checkboxCollection[i].type.toString().toLowerCase() == "checkbox") {
                checkboxCollection[i].checked = obj1.checked;
            }
        }
    }
</script>

вот другой способ меньше кода

$(function () {
       $('#select-all').click(function (event) {
          
           var selected = this.checked;
           // Iterate each checkbox
           $(':checkbox').each(function () {    this.checked = selected; });

       });
    });

Демо http://jsfiddle.net/H37cb/

<script type = "text/javascript" src = "http://code.jquery.com/jquery-latest.min.js" /></script>

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

$('input[name = "all"],input[name = "title"]').bind('click', function(){
var status = $(this).is(':checked');
$('input[type = "checkbox"]', $(this).parent('li')).attr('checked', status);
});

});
</script>




<div id = "wrapper">
 <li style = "margin-top: 20px">
  <input type = "checkbox" name = "all" id = "all" /> <label for='all'>All</label>
  <ul>
   <li><input type = "checkbox" name = "title" id = "title_1" /> <label for = "title_1"><strong>Title 01</strong></label>
    <ul>
     <li><input type = "checkbox" name = "selected[]" id = "box_1" value = "1" /> <label for = "box_1">Sub Title 01</label></li>
     <li><input type = "checkbox" name = "selected[]" id = "box_2" value = "2" /> <label for = "box_2">Sub Title 02</label></li>
     <li><input type = "checkbox" name = "selected[]" id = "box_3" value = "3" /> <label for = "box_3">Sub Title 03</label></li>
     <li><input type = "checkbox" name = "selected[]" id = "box_4" value = "4" /> <label for = "box_4">Sub Title 04</label></li>
    </ul>
   </li>
  </ul>
  <ul>
   <li><input type = "checkbox" name = "title" id = "title_2" /> <label for = "title_2"><strong>Title 02</strong></label>
    <ul>
     <li><input type = "checkbox" name = "selected[]" id = "box_5" value = "5" /> <label for = "box_5">Sub Title 05</label></li>
     <li><input type = "checkbox" name = "selected[]" id = "box_6" value = "6" /> <label for = "box_6">Sub Title 06</label></li>
     <li><input type = "checkbox" name = "selected[]" id = "box_7" value = "7" /> <label for = "box_7">Sub Title 07</label></li>
    </ul>
   </li>
  </ul>
 </li>
</div>

Для меня он работает только один цикл, переключается только один раз, потом ничего не делает.

mrudult 09.11.2013 11:39

Думаю, это метод attr(). поменял на prop()

mrudult 09.11.2013 11:46

Что ж, если я сниму выделение с какого-либо элемента из списка, не должен ли быть снят флажок «Выбрать все»?

some_other_guy 29.06.2015 12:48
<html>

<head>
<script type = "text/javascript">

    function do_this(){

        var checkboxes = document.getElementsByName('approve[]');
        var button = document.getElementById('toggle');

        if (button.value == 'select'){
            for (var i in checkboxes){
                checkboxes[i].checked = 'FALSE';
            }
            button.value = 'deselect'
        }else{
            for (var i in checkboxes){
                checkboxes[i].checked = '';
            }
            button.value = 'select';
        }
    }
</script>
</head>

<body>
<input type = "checkbox" name = "approve[]" value = "1" />
<input type = "checkbox" name = "approve[]" value = "2" />
<input type = "checkbox" name = "approve[]" value = "3" />

<input type = "button" id = "toggle" value = "select" onClick = "do_this()" />
</body>

</html>

это должно сделать свою работу:

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

Я не уверен, что никто не ответил таким образом (используя jQuery):

  $( '#container .toggle-button' ).click( function () {
    $( '#container input[type = "checkbox"]' ).prop('checked', this.checked)
  })

Он чистый, без циклов или предложений if / else и работает как шарм.

Немного измененная версия, которая корректно проверяет и снимает отметки

$('#select-all').click(function(event) {
        var $that = $(this);
        $(':checkbox').each(function() {
            this.checked = $that.is(':checked');
        });
    });

Когда вы позвоните в document.getElementsByName("name"), вы получите Object. Используйте .item(index) для обхода всех элементов Object

HTML:

<input type = "checkbox" onclick = "for(c in document.getElementsByName('rfile')) document.getElementsByName('rfile').item(c).checked = this.checked">

<input type=​"checkbox" name=​"rfile" value=​"/​cgi-bin/​">​
<input type=​"checkbox" name=​"rfile" value=​"/​includes/​">​
<input type=​"checkbox" name=​"rfile" value=​"/​misc/​">​
<input type=​"checkbox" name=​"rfile" value=​"/​modules/​">​
<input type=​"checkbox" name=​"rfile" value=​"/​profiles/​">​
<input type=​"checkbox" name=​"rfile" value=​"/​scripts/​">​
<input type=​"checkbox" name=​"rfile" value=​"/​sites/​">​
<input type=​"checkbox" name=​"rfile" value=​"/​stats/​">​
<input type=​"checkbox" name=​"rfile" value=​"/​themes/​">​
$(document).ready(function() {
                $(document).on(' change', 'input[name = "check_all"]', function() {
                    $('.cb').prop("checked", this.checked);
                });
            });

Попробуйте этот простой JQuery:

$('#select-all').click(function(event) {
  if (this.checked) {
    $(':checkbox').prop('checked', true);
  } else {
    $(':checkbox').prop('checked', false);
  }
});

Вы можете упростить это до $(':checkbox').prop('checked', this.checked), без условных условий.

Sumit 13.01.2017 09:32

Использование jQuery и нокаута:

С этой привязкой основной флажок остается синхронизированным с нижележащими флажками, он будет снят, если не отмечены все флажки.

ko.bindingHandlers.allChecked = {
  init: function (element, valueAccessor) {
    var selector = valueAccessor();

    function getChecked () {
      element.checked = $(selector).toArray().every(function (checkbox) {
        return checkbox.checked;
      });
    }

    function setChecked (value) {
      $(selector).toArray().forEach(function (checkbox) {
        if (checkbox.checked !== value) {
          checkbox.click();
        }
      });
    }

    ko.utils.registerEventHandler(element, 'click', function (event) {
      setChecked(event.target.checked);
    });

    $(window.document).on('change', selector, getChecked);

    ko.utils.domNodeDisposal.addDisposeCallback(element, () => {
      $(window.document).off('change', selector, getChecked);
    });

    getChecked();
  }
};

в html:

<input id = "check-all-values" type = "checkbox" data-bind = "allChecked: '.checkValue'"/>
<input id = "check-1" type = "checkbox" class = "checkValue"/>
<input id = "check-2" type = "checkbox" class = "checkValue"/>

Я недостаточно знаю о нокауте (я использую ko3.4 с cdnjs.cloudflare.com, но, похоже, это не работает - вообще. Я могу установить точку останова на начальном вызове init:, который запускается при загрузке страницы (что я считаю правильным), но переход к этому ничего не дает - ни одна из остальных функций не выполняется.Установите точку останова на других функциях, и они никогда не сработают.

Tony Suffolk 66 26.01.2016 04:47

Тони Саффолк, установлено два обработчика событий: onclick и onchange для флажка, а значение флажка обновляется в конце кода. Если этот код не работает в вашем проекте, установите флажок для атрибута data-bind.

blazkovicz 14.12.2016 10:29

Я удивлен, что никто не упомянул document.querySelectorAll(). Решение на чистом JavaScript, работает в IE9 +.

function toggle(source) {
    var checkboxes = document.querySelectorAll('input[type = "checkbox"]');
    for (var i = 0; i < checkboxes.length; i++) {
        if (checkboxes[i] != source)
            checkboxes[i].checked = source.checked;
    }
}
<input type = "checkbox" onclick = "toggle(this);" />Check all?<br />

<input type = "checkbox" />Bar 1<br />
<input type = "checkbox" />Bar 2<br />
<input type = "checkbox" />Bar 3<br />
<input type = "checkbox" />Bar 4<br />

это сработало в Chrome, но у меня было много флажков по разным причинам, поэтому вместо таргетинга 'type = "checkbox"' я выбрал 'name = "myobject"', и это тоже сработало.

Rich701 23.08.2017 20:14

Может быть, это следует изменить на новый правильный ответ, если бы не какое-то обсуждение было бы полезным. :-)

Jesse Steele 25.01.2020 13:40

Этот ответ было намного проще внедрить на существующие страницы, чем другие ответы. отличная работа.

T.S 31.01.2020 11:52

Этот пример работает с собственным JavaScript, где имя переменной флажка меняется, то есть не все "foo".

<!DOCTYPE html>
<html>
<body>

<p>Toggling checkboxes</p>
<script>
function getcheckboxes() {
    var node_list = document.getElementsByTagName('input');
    var checkboxes = [];
    for (var i = 0; i < node_list.length; i++) 
    {
        var node = node_list[i];
        if (node.getAttribute('type') == 'checkbox') 
        {
            checkboxes.push(node);
        }
    } 
    return checkboxes;
}
function toggle(source) {
    checkboxes = getcheckboxes();
    for (var i = 0 n = checkboxes.length; i < n; i++) 
    {
        checkboxes[i].checked = source.checked;
    }
}
</script>    

<input type = "checkbox" name = "foo1" value = "bar1"> Bar 1<br/>
<input type = "checkbox" name = "foo2" value = "bar2"> Bar 2<br/>
<input type = "checkbox" name = "foo3" value = "bar3"> Bar 3<br/>
<input type = "checkbox" name = "foo4" value = "bar4"> Bar 4<br/>

<input type = "checkbox" onClick = "toggle(this)" /> Toggle All<br/>

</body>
</html>

вашу функцию getcheckboxes можно заменить на document.querySelectorAll('input[type=checkbox]');

Kaiido 15.04.2016 05:54

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

Javascript:

function setAllCheckboxes(divId, sourceCheckbox) {
    divElement = document.getElementById(divId);
    inputElements = divElement.getElementsByTagName('input');
    for (i = 0; i < inputElements.length; i++) {
        if (inputElements[i].type != 'checkbox')
            continue;
        inputElements[i].checked = sourceCheckbox.checked;
    }
}

Пример HTML:

<p><input onClick = "setAllCheckboxes('actors', this);" type = "checkbox" />All of them</p>
<div id = "actors">
    <p><input type = "checkbox" name = "kevin" />Spacey, Kevin</p>
    <p><input type = "checkbox" name = "colin" />Firth, Colin</p>
    <p><input type = "checkbox" name = "scarlett" />Johansson, Scarlett</p>
</div>

Я надеюсь тебе понравится!

Вот реализация backbone.js:

events: {
    "click #toggleChecked" : "toggleChecked"
},
toggleChecked: function(event) {

    var checkboxes = document.getElementsByName('options');
    for(var i=0; i<checkboxes.length; i++) {
        checkboxes[i].checked = event.currentTarget.checked;
    }

},

Просто и ТОЧНО:

jQuery - при нажатии кнопки, div или элемента метки. Снимите все флажки на странице. Имейте в виду, что вам нужно будет настроить: флажок, чтобы сделать его более конкретным.

jQuery("#My-Button").click(function() {

  jQuery(':checkbox').each(function() {
    if (this.checked == true) {
      this.checked = false;                        
    } else {
      this.checked = true;                        
    }      
  });

});

html

<input class='all' type='checkbox'> All
<input class='item' type='checkbox' value='1'> 1
<input class='item' type='checkbox' value='2'> 2
<input class='item' type='checkbox' value='3'> 3

javascript

$(':checkbox.all').change(function(){
  $(':checkbox.item').prop('checked', this.checked);
});

1: Добавить обработчик событий по изменению

<th><INPUT type = "checkbox" onchange = "checkAll(this)" name = "chk[]" /> </th>

2: Измените код для обработки отмеченных / снятых отметок

 function checkAll(ele) {
     var checkboxes = document.getElementsByTagName('input');
     if (ele.checked) {
         for (var i = 0; i < checkboxes.length; i++) {
             if (checkboxes[i].type == 'checkbox') {
                 checkboxes[i].checked = true;
             }
         }
     } else {
         for (var i = 0; i < checkboxes.length; i++) {
             console.info(i)
             if (checkboxes[i].type == 'checkbox') {
                 checkboxes[i].checked = false;
             }
         }
     }
 }

Пожалуйста, не копируйте код вставки, вместо этого используйте ссылку stackoverflow.com/questions/19282219/…

java_dude 19.01.2018 17:36

У вас может быть разные наборы флажков на одной и той же форме. Вот решение, которое выбирает / снимает флажки по имени класса, используя ванильную функцию javascript document.getElementsByClassName

Кнопка Выбрать все

<input type='checkbox' id='select_all_invoices' onclick = "selectAll()"> Select All

Некоторые из флажков для выбора

<input type='checkbox' class='check_invoice' id='check_123' name='check_123' value='321' />
<input type='checkbox' class='check_invoice' id='check_456' name='check_456' value='852' />

JavaScript

    function selectAll() {
        var blnChecked = document.getElementById("select_all_invoices").checked;
        var check_invoices = document.getElementsByClassName("check_invoice");
        var intLength = check_invoices.length;
        for(var i = 0; i < intLength; i++) {
            var check_invoice = check_invoices[i];
            check_invoice.checked = blnChecked;
        }
    }

Это действительно работает. Пожалуйста, проверьте codepen.io/kustomweb/pen/gZqwLV

Nicolas Giszpenc 14.01.2019 21:32

Вы можете использовать этот простой код

$('.checkall').click(function(){
    var checked = $(this).prop('checked');
    $('.checkme').prop('checked', checked);
});

сделать это в сокращенной версии с помощью jQuery

Флажок "Выбрать все"

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

Флажок для детей

<input type = "checkbox" class = "chkDel">
<input type = "checkbox" class = "chkDel">
<input type = "checkbox" class = "chkDel">

jQuery

$("#chkSelectAll").on('click', function(){
     this.checked ? $(".chkDel").prop("checked",true) : $(".chkDel").prop("checked",false);  
})

Может быть, немного поздно, но, имея дело с флажком «Проверить все», я считаю, что вам также следует обработать сценарий, когда у вас установлен флажок «Проверить все», а затем снять один из флажков ниже.

В этом случае он должен автоматически снять флажок «Отметить все».

Кроме того, при ручной установке всех флажков вы должны автоматически установить флажок «Проверить все».

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

// HANDLES THE INDIVIDUAL CHECKBOX CLICKS
function client_onclick() {
    var selectAllChecked = $("#chk-clients-all").prop("checked");

    // IF CHECK ALL IS CHECKED, AND YOU'RE UNCHECKING AN INDIVIDUAL BOX, JUST UNCHECK THE CHECK ALL CHECKBOX.
    if (selectAllChecked && $(this).prop("checked") == false) {
        $("#chk-clients-all").prop("checked", false);
    } else { // OTHERWISE WE NEED TO LOOP THROUGH INDIVIDUAL CHECKBOXES AND SEE IF THEY ARE ALL CHECKED, THEN CHECK THE SELECT ALL CHECKBOX ACCORDINGLY.
        var allChecked = true;
        $(".client").each(function () {
            allChecked = $(this).prop("checked");
            if (!allChecked) {
                return false;
            }
        });
        $("#chk-clients-all").prop("checked", allChecked);
    }
}

// HANDLES THE TOP CHECK ALL CHECKBOX
function client_all_onclick() {
    $(".client").prop("checked", $(this).prop("checked"));
}

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

$("#select-all").change(function(){
   $(".allcheckbox").prop("checked", $(this).prop("checked"))
  })
  $(".allcheckbox").change(function(){
      if ($(this).prop("checked") == false){
          $("#select-all").prop("checked", false)
      }
      if ($(".allcheckbox:checked").length == $(".allcheckbox").length){
          $("#select-all").prop("checked", true)
      }
  })

Поскольку я не могу комментировать, вот как ответ: Я бы написал решение Джана Берка Гюдера в более общем виде: поэтому вы можете повторно использовать эту функцию для других флажков

<script language = "JavaScript">
  function toggleCheckboxes(source, cbName) {
    checkboxes = document.getElementsByName(cbName);
    for (var i = 0, n = checkboxes.length; i < n; i++) {
      checkboxes[i].checked = source.checked;
    }
  }
</script>
<input type = "checkbox" onClick = "toggleCheckboxes(this,\'foo\')" /> Toggle All<br/>

<input type = "checkbox" name = "foo" value = "bar1"> Bar 1<br/>
<input type = "checkbox" name = "foo" value = "bar2"> Bar 2<br/>
<input type = "checkbox" name = "foo" value = "bar3"> Bar 3<br/>
<input type = "checkbox" name = "foo" value = "bar4"> Bar 4<br/>
<input type = "checkbox" name = "foo" value = "bar5"> Bar 5<br/>

Спасибо khaldi и Clarity за указание на недостающую скобку!

user219901 27.08.2019 13:34

Методы, представленные ниже, очень просты для понимания, и вы можете реализовать существующие формы за считанные минуты.

With Jquery,

$(document).ready(function() {
  $('#check-all').click(function(){
    $("input:checkbox").attr('checked', true);
  });
  $('#uncheck-all').click(function(){
    $("input:checkbox").attr('checked', false);
  });
});

в форме HTML поместите кнопки ниже

<a id = "check-all" href = "javascript:void(0);">check all</a>
<a id = "uncheck-all" href = "javascript:void(0);">uncheck all</a> 

With just using javascript,

<script type = "text/javascript">
function checkAll(formname, checktoggle)
{
  var checkboxes = new Array(); 
  checkboxes = document[formname].getElementsByTagName('input');

  for (var i=0; i<checkboxes.length; i++)  {
    if (checkboxes[i].type == 'checkbox')   {
      checkboxes[i].checked = checktoggle;
    }
  }
}
</script>

в форме HTML поместите кнопки ниже

<button onclick = "javascript:checkAll('form3', true);" href = "javascript:void();">check all</button>

<button onclick = "javascript:checkAll('form3', false);" href = "javascript:void();">uncheck all</button>

Вы можете использовать этот код.

var checkbox = document.getElementById("dlCheckAll4Delete");
checkbox.addEventListener("click", function (event) {
  let checkboxes = document.querySelectorAll(".dlMultiDelete");
  checkboxes.forEach(function (ele) {
    ele.checked = !!checkbox.checked;
  });
});

Другие вопросы по теме