Цикл Javascript - PullRequest
       14

Цикл Javascript

0 голосов
/ 15 июня 2011

У меня есть фрагмент JavaScript, который проходит по всем входным данным (все строки в таблице), и если один флажок отмечен в одной строке, он проверяет все флажки во всех строках.

Мне действительно нужночтобы установить 2-й флажок в той же строке, а не во всех строках, поэтому мне нужно отредактировать фрагмент JavaScript, где он увеличивается

//loop through all inputs
            for(i = 0; i < inputs.length; i++) 

<script type="text/javascript">
var mainchecked = false;  

    function checkAll() {

        //get all input elements
        var inputs = document.getElementsByTagName('input');

        //if the box is being checked
        if(!mainchecked) {

            //loop through all inputs
            for(i = 0; i < inputs.length; i++) {
                //does it have autocheck?
                if(inputs[i].className == 'autocheck') {
                    //then check the box!
                    inputs[i].checked = "checked";  
                }
            }
            mainchecked = true;
        } else {
            //box is being unchecked, uncheck everything
            for(i = 0; i < inputs.length; i++) {
                inputs[i].checked = "";
            }
            mainchecked = false;
        }
    }
</script>

1 Ответ

0 голосов
/ 16 июня 2011

Не просматривайте все входные данные, циклически проходите по строкам таблицы и обрабатывайте входные данные в каждой строке.В следующем коде предполагается, что управляющий флажок для строки находится в первом входном сигнале, найденном в строке, и что для всех других флажков в строке, к которой применяется эта функция, будет установлен класс «autocheck»;Я оставлю вам возможность изменить это при необходимости для вашего конкретного случая (например, вам может понадобиться проверить, type=="checkbox").

Я не проверял это, но этого должно быть достаточно дляпродолжайте.

function checkAll(){
   var _rows = document.getElementById("yourTableID").rows;
   var i,
       j,
       isChecked,
       inputs;

   for (i=0; i < _rows.length; i++) {
      inputs = _rows[i].getElementsByTagName("input");
      isChecked = inputs[0].checked;
      for (j=1; j < inputs.length; j++) {
         if (inputs[j].className == "autocheck") {
            inputs[j].checked = isChecked;
         }
      }
   }

}

ОБНОВЛЕНИЕ: только что заметил в ваших комментариях, что вы, кажется, запускаете эту функцию из onclick контрольных флажков.Если это так, то вы можете передать ссылку на этот флажок в вашу функцию, а затем обработать только строку, в которой она находится, следующим образом:

<input ... onclick="checkAll(this);" ...>

function checkAll(cb){
       var _row = cb.parentNode.parentNode,
           j,
           isChecked = cb.checked,
           inputs;

          inputs = _row.getElementsByTagName("input");
          for (j=0; j < inputs.length; j++) {
             if (inputs[j].className == "autocheck") {
                inputs[j].checked = isChecked;
             }
          }
    }

Google "mdc parentnode" для получения дополнительной информации.

...