Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Выделение строк цветом
 
 автор: Владимир55   (05.12.2012 в 18:42)   письмо автору
 
 

На странице имеется скрипт, который позволяет выбрать все чекбоксы, имеющиеся в каждой строке таблицы. Можно ли доработать скрипт или код таблицы таким образом, чтобы нечетные строки имели один фон, а четные - другой?
Причем, изменение фона должно касаться только тех строк, на которые распространяется действие javascript

 <table id="table2">
      <tr>
        <td><p class="f1"><input type="checkbox" name="vse_grupp" onclick="change_grupp()"></p></td>
        <td>Номер</td>
        <td>Название</td>
      </tr> 
 
         <script type="text/javascript">
        function change_grupp()
            {
                for (i = 1; i <= 3; i++)
                {
                    var elem = document.getElementById("grupp_" + i);
                    if(elem.checked === true)
                        elem.checked = false;
                    else
                        elem.checked = true;
                }
            }
        </script> 
 
                   <tr>
                    <td><p class="f1"><input type="checkbox" id="grupp_1" name="del_grupp[]" value="5"></p></td>
                    <td><p class="f1">1</p></td>
                    <td>Первая строка</td>
                  </tr>
                
                  <tr>
                    <td><p class="f1"><input type="checkbox" id="grupp_2" name="del_grupp[]" value="6"></p></td>
                    <td><p class="f1">2</p></td>
                    <td>Вторая строка</td>
                  </tr>
                
                  <tr>
                    <td><p class="f1"><input type="checkbox" id="grupp_3" name="del_grupp[]" value="7"></p></td>
                    <td><p class="f1">3</p></td>
                    <td>Третья строка</td>
                  </tr>
                
                  <tr>
                    <td>&nbsp;</td>
                    <td>4</td>
                    <td>В этой строке фон не нужен</td>
                  </tr>
</table> 

  Ответить  
 
 автор: confirm   (05.12.2012 в 19:18)   письмо автору
 
   для: Владимир55   (05.12.2012 в 18:42)
 

Лучше исключать такие проверки как if(checked) else..., так как вам нужно отметить/разотметить. И не получать в итерациях объект, а получить их до цикла. Лучше так:
<table id="table2"> 
      <tr> 
        <td><p class="f1"><input type="checkbox" name="vse_grupp" onclick="change_grupp(this.checked)"></p></td> 
        <td>Номер</td> 
        <td>Название</td> 
      </tr>  
  
         <script type="text/javascript"> 
        function change_grupp(c) 
            { 
                var elem = document.getElementById("table2").getElementsByTagName('input');
                for (i = 1; i <=3; i++) {
                   elem[i].checked = c;
                   elem[i].parentNode.parentNode.parentNode.style.background = i & 1 ? '#ccc' : '#fff';   
                }
            } 
        </script>  
  
                   <tr> 
                    <td><p class="f1"><input type="checkbox" id="grupp_1" name="del_grupp[]" value="5"></p></td> 
                    <td><p class="f1">1</p></td> 
                    <td>Первая строка</td> 
                  </tr> 
                 
                  <tr> 
                    <td><p class="f1"><input type="checkbox" id="grupp_2" name="del_grupp[]" value="6"></p></td> 
                    <td><p class="f1">2</p></td> 
                    <td>Вторая строка</td> 
                  </tr> 
                 
                  <tr> 
                    <td><p class="f1"><input type="checkbox" id="grupp_3" name="del_grupp[]" value="7"></p></td> 
                    <td><p class="f1">3</p></td> 
                    <td>Третья строка</td> 
                  </tr> 
                 
                  <tr> 
                    <td>&nbsp;</td> 
                    <td>4</td> 
                    <td>В этой строке фон не нужен</td> 
                  </tr> 
</table>

PS. Может лучше "разукрасить" строки сразу, а не заниматься этим в сценарии?

И еще одно PS. Именно такая проверка if(elem.checked === true), не нужна еще и потому, как кроме булевого значения данный атрибут вам ничего и не вернет. И необязательно устанавливать чекбокс в состояние "выбрано" указывая значение true, можете указать и 1, и данному атрибуту будет установлено булево значение true. true = 1, false = 0, и вы можете производить с этими булевыми значениями такие же математические и логические операции как и с 1 и 0. Замените для эксперимента в функции строку elem[i].checked = c; на elem[i].checked ^= 1; И у вас будет инвертироваться выбор чекбосксов. Может где такое и пригодится.

  Ответить  
 
 автор: Владимир55   (05.12.2012 в 21:30)   письмо автору
19.8 Кб
 
   для: confirm   (05.12.2012 в 19:18)
 

Спасибо!

PS. Может лучше "разукрасить" строки сразу, а не заниматься этим в сценарии?
В принципе, можно разукрасить и сразу, поскольку таблица формируется РНР-скриптом.

Замените для эксперимента в функции строку elem[i].checked = c; на elem[i].checked ^= 1; И у вас будет инвертироваться выбор чекбосксов. Может где такое и пригодится.
Спасибо, уже пригодилось!

Однако работает не совсем так, как ожидалось (смотрю через ФФ и Хром).

Сразу после вызова файла раскраска строк отсутствует (скриншот).

  Ответить  
 
 автор: Владимир55   (05.12.2012 в 21:32)   письмо автору
19.8 Кб
 
   для: Владимир55   (05.12.2012 в 21:30)
 

После общего чекбокса раскрашивание появляется (скриншот).

  Ответить  
 
 автор: Владимир55   (05.12.2012 в 21:34)   письмо автору
20.4 Кб
 
   для: Владимир55   (05.12.2012 в 21:32)
 

После снятия общего чекбокса раскрашивание остается (скриншот).

А хотелось бы, чтобы раскрашивание было всегда, независимо от чекбоксов (общего и частных).

Это возможно?

  Ответить  
 
 автор: confirm   (05.12.2012 в 22:00)   письмо автору
 
   для: Владимир55   (05.12.2012 в 21:34)
 

Раскрашивайте строки таблицы сразу при ее выводе, зачем ее "красить" скриптом? Другое дело, если нужно отметить те строки таблицы, в которых выбран чекбокс, тогда да, оправдано.

  Ответить  
 
 автор: confirm   (05.12.2012 в 21:58)   письмо автору
 
   для: Владимир55   (05.12.2012 в 21:30)
 

Ну так предложенная замена не занимается раскраской строк, это я написал, чтобы поняли, что установить/сбросить чекбокс можно и установкой 1/0 значения атрибута. Ну и к тому, что в данном случае в группе чекбоксов будет инвертироваться выбор - если чекбокс отмечен, то будет сброшен, если нет, значит будет установлен. Вот об этом я и говорил "может пригодится", если нужно будет инвертировать выбор.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования