2010-05-14 107 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