【问题标题】:How to Check the checkbox when all the checkboxes in a row are checked?选中一行中的所有复选框时如何选中复选框?
【发布时间】:2012-12-01 13:58:57
【问题描述】:

嗨,所有其他复选框检查了我的意思是什么,我该如何检查复选框 我有一个看起来像这样的 div 表

<div id="Row-8">
    <span class="span2">
        <label class="checkbox">
            <input type="checkbox" class="regular-checkbox" onchange="checkallrowcheckboxes(this)" value="8" name="selectedObjects" id="8"><label for="rowcommoncheckbox-8"></label></label></span>
    <span class="span2">AddOrEdit</span>
    <span class="span2">
        <label class="checkbox">
            <input type="checkbox" value="8" class="regular-checkbox" name="chkAdd" id="Add-8"><label for="Add-8"></label></label></span>
    <span class="span2">
        <label class="checkbox">
            <input type="checkbox" value="8" class="regular-checkbox" name="chkEdit" id="Edit-8"><label for="Edit-8"></label></label></span>
    <span class="span2">
        <label class="checkbox">
            <input type="checkbox" value="8" class="regular-checkbox" name="chkDel" id="Delete-8"><label for="Delete-8"></label></label></span>
    <span class="span2">
        <label class="checkbox">
            <input type="checkbox" value="8" class="regular-checkbox" name="chkview" id="View-8"><label for="View-8"></label></label></span>
</div>

看起来像这样

ChkColumn  PageName Chk1 Chk2 Chk3 Chk4

我想要的是当右侧 os 行中的所有复选框都被选中时,左侧复选框应该被自动选中..即 Chkcolumn 应该在 Chk1 Chk2 Chk3 Chk4 被检查时自动检查..

【问题讨论】:

  • 它仍然没有多大意义。你试过什么?你有小提琴吗?

标签: jquery


【解决方案1】:

无耻的自我推销:这似乎是a jQuery plugin I've written 的完美用例。

试试这个:

$('#Row-8 input[type="checkbox"]:first')
    .checkAll('#Row-8 input[type="checkbox"]:not(:first)');​

演示:http://jsfiddle.net/mattball/9ErH6

【讨论】:

  • 但是如果用户选择了右边的所有复选框,那么左边的复选框应该被选中吗?但它没有发生。
  • 我认为他们想要的东西与你所展示的完全不同。听起来他们希望右侧的 4 个复选框驱动左侧的行为,而不是左侧的复选框驱动右侧的四个。
  • 是的,我希望在用户选择屏幕右侧的所有复选框时选中左侧复选框
  • @SoftwareNerd 已为您更新。这一切都在选择器中,您的标记意味着选择器需要更复杂一点:)
  • 我不知道 div id id 在循环中动态绑定,如果我应该说它实际上是一个 div 网格
【解决方案2】:

在这里演示:http://jsfiddle.net/Mx4q2/

我在复选框中添加了一些“驱动”/“驱动”类,然后使用了这个脚本:

function driveCheckbox(event){
    var $currentRow = $(this).parents('.row');

    var $checkedDrivers = $currentRow.find('.driving-checkbox:checked');
    if($checkedDrivers.length == 4){
        $currentRow.find('.driven-checkbox').prop('checked', true);
    } else {
        $currentRow.find('.driven-checkbox').prop('checked', false);
    }
}

function selectAll(event){

    var $currentRow = $(this).parents('.row');

    var $targets = $currentRow.find('.driving-checkbox');
    if($(this).is(':checked')){
        $targets.prop('checked', true);
    } else {
        $targets.prop('checked', false);
    }
}
$('.driving-checkbox').change(driveCheckbox);
$('.driven-checkbox').change(selectAll);

【讨论】:

  • 当我为一行执行此操作时,所有驱动复选框都在 div 网格中被选中
  • 再次更新,现在支持多行(参见最新的演示 URL)
【解决方案3】:
$(function() {
    $('#Row-8 input').change(function() {
        var add8 = $('#Add-8').is(':checked');
        var edit8 = $('#Edit-8').is(':checked');
        var delete8 = $('#Delete-8').is(':checked');
        var view8 = $('#View-8').is(':checked');
        if (add8 && edit8 && delete8 && view8) {
            $('#Row-8 input').attr('checked',false);
            $('#8').attr('checked',true);
        }
    });
});

【讨论】:

  • 这不是基于单个 div...可能有多个 div
  • 都是基于ID的,什么意思?他有他的 html 结构的方式,这是我能做的最好的。理想情况下,我会在一个组中拥有正确的 4 个复选框,以便我可以更轻松地引用它们,从而减少工作所需的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-26
  • 2014-06-20
  • 2018-11-07
  • 2015-08-25
相关资源
最近更新 更多