Установите / снимите все флажки в jQuery

У меня недостаточно знаний о jQuery, мне нужен еще один флажок с именем "выбрать все". Когда я выбираю этот флажок, все флажки на странице HTML должны быть установлены. Как я могу это сделать?

Я использую приведенный ниже код, но он не работает нормально:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="listbox.css" />
<script src="jquery-2.1.1.min.js"></script>

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

</head>

<body>


<label for="blah">item-1</label> <input name="checkbox-1" id="checkbox-1" type="checkbox" />    
<br />
<input type="checkbox" name="select-all" id="select-all" />

</body>
</html>

Я скачал JQ по ссылке:

http://jquery.com/download/

Скачайте сжатый, производственный jQuery 2.1.1

http://code.jquery.com/jquery-2.1.1.min.js

4 ответа

Решение
    <ul>
      <li><label>item-1</label><input name="checkbox-1" id="checkbox-1" type="checkbox" class="checkitem" /></li> 
      <li><label>item-1</label><input name="checkbox-2" id="checkbox-2" type="checkbox" class="checkitem"  /></li> 
      <li><label>item-1</label><input name="checkbox-3" id="checkbox-3" type="checkbox" class="checkitem"  /></li> 
      <li><label>item-1</label><input name="checkbox-4" id="checkbox-4" type="checkbox" class="checkitem"  /></li> 
    </ul>
    <input type="checkbox" name="select-all" id="select-all" /> Check all

    <script>
    $(document).ready(function() {
        $('#select-all').click(function(event) {  
            if(this.checked) { 
                $('.checkitem').each(function() { 
                    this.checked = true;     
                });
            }else{
                $('.checkitem').each(function() {
                    this.checked = false; 
                });        
            }
        });

    });
    </script>

http://jsfiddle.net/9o3f01e0/

[Вот скрипка, которую я сделал][1]

Добавить скрипт внизу страницы

[1]: http://jsfiddle.net/zbjc0fpe/1/

Попробуйте что-то вроде этого.

$('#select-all').click(function(event) {
   var checked = this.checked; 
   $("input[type=checkbox]").each(function(){
     $(this).prop('checked', checked);
   });
});

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

$(document).on('click','[data-toggle=checkAll]', function() {
    var $all     = $(this),
        $targets = $( $all.data('target') )
    ;
    $targets.prop('checked', $all.is(':checked') );
}

Используя приведенный выше скрипт, вы можете иметь столько флажков "checkAll" на странице, сколько захотите... каждый флажок "check all" просто должен указать другой селектор цели:

<input type='checkbox' data-toggle='checkAll' data-target='.check-option' /> check all
<input type='checkbox' class='check-option' value='1' /> option 1
<input type='checkbox' class='check-option' value='2' /> option 2

<input type='checkbox' data-toggle='checkAll' data-target='.check-option2' /> check all 2
<input type='checkbox' class='check-option2' value='1' /> option 1
<input type='checkbox' class='check-option2' value='2' /> option 2
Другие вопросы по тегам