6

我有这个代码:

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' 的计数也可以变化。

4

6 回答 6

4

您可以通过比较复选框的总数与选中框的数量来查看是否所有复选框都被选中,在同一个 parenttr中。试试这个:

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

示例小提琴

于 2012-12-20T14:14:01.627 回答
1

试试这个代码它的工作原理:

演示

$('.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);
    }
});
于 2012-12-20T14:14:28.957 回答
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/

于 2012-12-20T14:14:41.623 回答
0
$('.c2').click(function () {
    var $tbl = $(this).closest('.tbl');
    $tbl.find('.c1').prop('checked', $tbl.find('.c2:not(:checked)').length === 0);
});

演示

于 2012-12-20T14:15:07.367 回答
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);
     }
  });​
于 2012-12-20T14:16:04.033 回答
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/

于 2012-12-20T14:18:21.573 回答