2010-05-14 110 views
0

我有这段代码,它检查一些id并启用其他代码,javascript很清楚它做了什么,但是因为它对应于某些特定的id范围,所以我不能做一看,直到它完成,但我正在寻找一种方法来做到这一点动态和保存40行代码(或更多),因为它不是最好的方式。Javascript:制作一个静态代码,动态 - 输入列表

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); 
}; 
+0

代码中有很多不必要的重复,也许更具体的与你正在尝试做什么,即我想采用这个函数X,并允许它适用于任何一组复选框或东西。很难说出你在问什么“我不能只看看它,直到它完成,但我正在寻找一种方法来做到这一点动态” – 2010-05-14 23:10:23

回答

0

这不是一个答案,但有一些额外的代码在这里:

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

应该

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

三元运算符只是把它笨拙。

+0

谢谢你的建议。 – BoDiE2003 2010-05-14 21:04:05