来自同一个表的jquery自动复选复选框

时间:2012-12-20 14:04:16

标签: jquery

我有这段代码:

HTML

<table class=tbl>
    <tr>
        <td>
            <input class='c1' type='checkbox'>
            <label>Ceckbox1</label>
        </td>
        <td>
            <input class='c2' type='checkbox'>
            <label>Ceckbox2</label>
        </td>
        <td>
            <input class='c2' type='checkbox'>
            <label>Ceckbox2</label>
        </td>
        <td>
            <input class='c2' type='checkbox'>
            <label>Ceckbox2</label>
        </td>
    </tr>
</table>
<table class=tbl>
    <tr>
        <td>
            <input class='c1' type='checkbox'>
            <label>Ceckbox1</label>
        </td>
        <td>
            <input class='c2' type='checkbox'>
            <label>Ceckbox2</label>
        </td>
        <td>
            <input class='c2' type='checkbox'>
            <label>Ceckbox2</label>
        </td>
        <td>
            <input class='c2' type='checkbox'>
            <label>Ceckbox2</label>
        </td>
     </tr>
   </table>

的JavaScript

 $('.c2').click(function () {
     if ($(this).parent().find('.c2').is(':checked')) {
         alert('all are checked');
     } else {
         alert('none are checked');
     }
 });

我正在尝试使用jquery仅在检查来自同一'tbl'的所有'c2'时自动检查'c1'。 'c2'的计数可以和'tbl'的计数一样变化。

6 个答案:

答案 0 :(得分:4)

您可以通过在同一个父tr内将复选框的总数与复选框的数量进行比较来查看是否已选中所有复选框。试试这个:

$('.c2').change(function () {
    var $parent = $(this).closest('tr');
    var allChecked = $('.c2', $parent).length === $('.c2:checked', $parent).length;
    $('.c1', $parent).prop('checked', allChecked);
});

Example fiddle

答案 1 :(得分:1)

尝试使用此代码:

DEMO

$('.c2').change(function(){
    var all = true;
    $(this).parent().parent().find('.c2').each(function(index){
        if(!($(this).is(':checked'))){
           all =  false;
        }
    });
    if (all==true){
        $(this).parent().parent().find('.c1').attr('checked', true);
    }
});

答案 2 :(得分:0)

这将检查是否检查了同一表上的所有.c2复选框:

$('.c2').on('change', function(){
  var allCheckboxes = $(this).parents('table').find('.c2');
  var allCheckedBoxes = $(this).parents('table').find('.c2:checked');

  if(allCheckboxes.length === allCheckedBoxes.length ) {
     $(this).parents('table').find('.c1').prop('checked', true);
  }
});​

演示:http://jsfiddle.net/maniator/JxCC2/

答案 3 :(得分:0)

$('.c2').click(function () {
    var $tbl = $(this).closest('.tbl');
    $tbl.find('.c1').prop('checked', $tbl.find('.c2:not(:checked)').length === 0);
});

DEMO

答案 4 :(得分:0)

尝试以下

 $('.c1').click(function () {
     if ($(this).parent().find('.c1').is(':checked')) {
         alert('all are checked');
         $('.tbl input').attr('checked',true);
     } else {
         alert('none are checked');
          $('.tbl input').attr('checked', false);
     }
  });​

答案 5 :(得分:0)

尝试

$('.c2').click(function () {
    var all = $(this).closest('.tbl').find('.c2'),
        checked = all.filter(':checked');
     if (all.length === checked.length) {
         alert('all are checked');
     } else {
         alert('none are checked');
     }
 });​

http://jsfiddle.net/tarabyte/Q6San/