Select 所有带 icheck 的复选框

Select all checkbox with icheck

我正在为复选框使用 iCheck 插件。我在那里放了一个 "Select all" 功能。结构:

它工作正常,就像选中 "Select all" 时一样,所有的复选框都会被选中。当取消选中 "Select all" 时,所有复选框都将取消选中。但是,在选中 "Select all" 之后,如果取消选中任何复选框,"Select all" 也应该自动取消选中,因为那时所有的复选框都没有被选中。

为了做到这一点,我写了这个:

$('#check-all').on('ifChanged', function(event){
    if($('.check').filter(':checked').length == $('.check').length) {
        $('#check-all').iCheck('check');
    } else {
        $('#check-all').iCheck('uncheck');
    }
    $('#check-all').iCheck('update');
});

但是,在放置此代码后,我的复选框无法正常工作,例如 "Select all" 无法通过单击操作,它经常需要多次单击。当取消选中任何单个复选框时,"Select all" 也不会取消选中。代码有什么问题?怎么写才正确?

Fiddle work

// Remove the checked state from "All" if any checkbox is unchecked
$('.check').on('ifUnchecked', function (event) {
    $('#check-all').iCheck('uncheck');
});

// Make "All" checked if all checkboxes are checked
$('.check').on('ifChecked', function (event) {
    if ($('.check').filter(':checked').length == $('.check').length) {
        $('#check-all').iCheck('check');
    }
});

处理 $('#check-all').on('ifUnchecked', ... 虽然很棘手 - 它触发其他处理并且每个复选框都未选中

fiddle