views:

28

answers:

1

I have this code, that checks some ids and enable others, the javascript is pretty clear about what it does, but since it corresponds to some specific id ranges, I cant do just a look until it finishes, but I'm looking a way to do this dynamic and save 40 lines of code (or more), since its not the best way.

function loopGroup1() {
    var a = 0;
    do {
        $$('.selectedAuthorities-3_' + a).each(function(chk1) {
            // watch for clicks
                chk1.observe('click', function(evt) {
                    dynamicCheckbox1();
                });
                dynamicCheckbox1();
            });
        a++;
    } while (a < 4);
}

function dynamicCheckbox1() {
    // count how many of group_first are checked,
    // doEnable true if any are checked
    var doEnable = ($$('.selectedAuthorities-3_0:checked').length > 0) ? true
            : false;
    var doEnable1 = ($$('.selectedAuthorities-3_1:checked').length > 0) ? true
            : false;
    var doEnable2 = ($$('.selectedAuthorities-3_2:checked').length > 0) ? true
            : false;
    // for each in group_second, enable the checkbox, and
    // remove the cssDisabled class from the parent label
    var i = 0;

    do {
        $$('.selectedAuthorities-4_' + i).each(function(item) {
            if (doEnable || doEnable1 || doEnable2) {
                item.enable().up('li').removeClassName('cssDisabled');
            } else {
                item.disable().up('li').addClassName('cssDisabled');
            }
        });
        i++;
    } while (i < 4);
};

/*
 * 
 * Loop Group 2
 * 
 * 
 */

function loopGroup2() {
    var a = 0;
    do {
        $$('.selectedAuthorities-5_' + a).each(function(chk1) {
            // watch for clicks
                chk1.observe('click', function(evt) {
                    dynamicCheckbox2();
                });
                dynamicCheckbox2();
            });
        a++;
    } while (a < 4);
}

function dynamicCheckbox2() {
    // count how many of group_first are checked,
    // doEnable true if any are checked
    var doEnable3 = ($$('.selectedAuthorities-5_0:checked').length > 0) ? true
            : false;
    // for each in group_second, enable the checkbox, and
    // remove the cssDisabled class from the parent label
    var i = 0;

    do {
        $$('.selectedAuthorities-6_' + i).each(function(item) {
            if (doEnable3) {
                item.enable().up('li').removeClassName('cssDisabled');
            } else {
                item.disable().up('li').addClassName('cssDisabled');
            }
        });
        i++;
    } while (i < 4);
};

/*
 * 
 * Loop Group 3
 * 
 * 
 */

function loopGroup3() {
    var a = 0;
    do {
        $$('.selectedAuthorities-6_' + a).each(function(chk1) {
            // watch for clicks
                chk1.observe('click', function(evt) {
                    dynamicCheckbox3();
                });
                dynamicCheckbox3();
            });
        a++;
    } while (a < 4);
}

function dynamicCheckbox3() {
    // count how many of group_first are checked,
    // doEnable true if any are checked
    var doEnable4 = ($$('.selectedAuthorities-6_0:checked').length > 0) ? true
            : false;
    var doEnable5 = ($$('.selectedAuthorities-6_1:checked').length > 0) ? true
            : false;
    // for each in group_second, enable the checkbox, and
    // remove the cssDisabled class from the parent label
    var i = 0;

    do {
        $$('.selectedAuthorities-7_' + i).each(function(item) {
            if (doEnable4 || doEnable5) {
                item.enable().up('li').removeClassName('cssDisabled');
            } else {
                item.disable().up('li').addClassName('cssDisabled');
            }
        });
        i++;
    } while (i < 4);
};

/*
 * 
 * Loop Group 4
 * 
 * 
 */

function loopGroup4() {
    var a = 0;
    do {
        $$('.selectedAuthorities-9_' + a).each(function(chk1) {
            // watch for clicks
                chk1.observe('click', function(evt) {
                    dynamicCheckbox4();
                });
                dynamicCheckbox4();
            });
        a++;
    } while (a < 4);
}

function dynamicCheckbox4() {
    // count how many of group_first are checked,
    // doEnable true if any are checked
    var doEnable6 = ($$('.selectedAuthorities-9_0:checked').length > 0) ? true
            : false;
    var doEnable7 = ($$('.selectedAuthorities-9_1:checked').length > 0) ? true
            : false;
    // for each in group_second, enable the checkbox, and
    // remove the cssDisabled class from the parent label
    var i = 0;

    do {
        $$('.selectedAuthorities-10_' + i).each(function(item) {
            if (doEnable6 || doEnable7) {
                item.enable().up('li').removeClassName('cssDisabled');
            } else {
                item.disable().up('li').addClassName('cssDisabled');
            }
        });
        i++;
    } while (i < 4);
};
A: 

This isn't an answer, but there's some extra code in here:

var doEnable = ($$('.selectedAuthorities-3_0:checked').length > 0) ? true
            : false;

should be

var doEnable = $$('.selectedAuthorities-3_0:checked').length > 0;

The ternary operator is just making it clumsier.

Jonathon
Thank you for the advice.
BoDiE2003