添加课程" copyMe"和启用按钮,对复选框应用相同的行为

时间:2014-10-22 21:30:44

标签: javascript jquery html

我添加了一个类copyMe的代码,如果至少有一个复选框被更改(选中/取消选中),也启用了切换按钮,这是该行为背后的代码:

// Enable button #btnAplicarNorma and add copyMe class when any of the checkbox changes 
$('#resultadoNormaBody').on('change', 'input[type=checkbox]', function () {
    var $my_checkbox = $(this);
    var $my_tr = $my_checkbox.closest('tr');

    if ($my_checkbox.prop('checked')) {
        $my_tr.addClass('copyMe');
    }

    var $all_checkboxes = $my_checkbox.closest('tbody').find('input[type=checkbox]');
    $all_checkboxes.each(function () {
        if ($(this).prop('checked')) {
            $('#btnAplicarNorma').prop('disabled', false);
            return false;
        }
        $('#btnAplicarNorma').prop('disabled', true);
    });
});

现在我尝试应用相同的行为,但这次是一个复选框,切换所有复选框,我做错了,因为我没有在{{上获得任何匹配元素集1}} var。这是我为此尝试的代码:

$all_checkboxes

我也试过改变这一行:

// Enable button #btnAplicarNorma and add copyMe class when #toggleCheckboxNorma changes
$('#resultadoNorma').on('change', '#toggleCheckboxNorma', function () {
    var $my_checkbox = $(this);
    var $all_checkboxes = $my_checkbox.closest('tbody').find('input[type=checkbox]');

    console.log($my_checkbox);
    console.log($all_checkboxes);

    $all_checkboxes.each(function () {
        if ($(this).prop('checked')) {
            $(this).closest('tr').addClass('copyMe');
            $('#btnAplicarNorma').prop('disabled', false);
            return false;
        }

        $(this).closest('tr').removeClass('copyMe');
        $('#btnAplicarNorma').prop('disabled', true);
    });
});

到此:

var $all_checkboxes = $my_checkbox.closest('tbody').find('input[type=checkbox]');

但是我得到了相同的信息,所以我的想法就是当我更改var $all_checkboxes = $('#resultadoNorma').closest('tbody').find('input[type=checkbox]'); 所有#toggleCheckboxNorma应该获得课程tr并且copyMe应该启用时如果它&# 39;相反我应该回去删除课程并禁用按钮。这是一个带有代码示例的fiddle。小心,在小提琴中默认加载所有内容但在我的代码TR中是通过Ajax调用动态生成的,我做错了什么?

1 个答案:

答案 0 :(得分:2)

我认为问题是你的函数marcarTodosCheck()正在中断。在更改属性后添加.trigger("change"),如下所示。这是你想要的结果吗?请参阅示例:http://jsfiddle.net/ot96p9mL/5/

function marcarTodosCheck(selChk, tableBody) {
    $(selChk).on('click', function () {
        var $toggle = $(this).is(':checked');
        $(tableBody).find("input:checkbox").prop("checked", $toggle).trigger("change");
    });

    $(tableBody).find("input:checkbox").on('click', function () {
        if (!$(this).is(':checked')) {
            $(selChk).prop("checked", false).trigger("change");
        } else if ($(tableBody).find("input:checkbox").length == $(tableBody).find("input:checkbox:checked").length) {
            $(selChk).prop("checked", true).trigger("change");
        }
    });
}