drgullin / icheck

Highly customizable checkboxes and radio buttons (jQuery & Zepto)
http://fronteed.com/iCheck
7.39k stars 1.63k forks source link

indeterminate checkboxes #366

Open SirwanAfifi opened 7 years ago

SirwanAfifi commented 7 years ago

I am using this technique for having tri-state check boxes that works great with normal checkbox, But I going to use iCheck, But I can't get it to work, Here's my code:

$(function () {

    var $check = $('.tristate');

    var editMode = $('#editMode').data('edit-mode').toLowerCase();

    var isTrueSet = (editMode === 'true');
    if (isTrueSet) {
        $check.each(function () {
            select_change(this, isTrueSet);
        });
    }

    $check.click(function () {
        select_change(this, false);
    });
});

function select_change(element, isEditModel) {
    var el = $(element);
    var data = el.data('checked');
    var i = isEditModel ? 2 : 0;
    if (!isEditModel) {
        switch (data) {

            // unchecked, going indeterminate
            case i:
                el.data('checked', 2);
                el.prop('indeterminate', true);
                el.val(2);
                break;
            case 0:
                el.data('checked', 2);
                el.prop('indeterminate', true);
                el.val(2);
                break;

                // indeterminate, going checked
            case 1:
                el.data('checked', 0);
                el.prop('indeterminate', false);
                el.prop('checked', false);
                el.val(0);
                break;

            case 2:
                el.data('checked', 1);
                el.prop('indeterminate', false);
                el.prop('checked', true);
                el.val(1);
                break;

                // checked, going unchecked
            default:
                el.data('checked', 0);
                el.prop('indeterminate', false);
                el.prop('checked', false);
                el.val(0);

        }
    } else {
        switch (data) {

            case 0:
                el.data('checked', 0);
                el.prop('indeterminate', false);
                el.prop('checked', false);
                el.val(0);
                break;

            case 1:
                el.data('checked', 1);
                el.prop('indeterminate', false);
                el.prop('checked', true);
                el.val(1);
                break;

            case 2:
                el.data('checked', 2);
                el.prop('indeterminate', true);
                el.val(2);
                break;

        }
    }
}
SirwanAfifi commented 7 years ago

@fronteed Any idea?