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

HTML+CSS+JavaScript

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

 

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

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

тема: Таблица с checkbox
 
 автор: devil943   (11.11.2009 в 19:41)   письмо автору
 
 

Цель - сделать удобную среду для работы с новостями и статьями на сайте. В данном случае создаю таблицу со списками материалов. У каждой строки есть чекбокс, содержащий идентификатор материала.

Цель - сделать каждую строку таблицы кликабельной, чтобы после клика строка закрашивалась определенным цветом, а чекбокс выделялся. На данный момент проблема в том, что ко клику по чекбоксу ничего не происходит (потому что событие onclick навешено на tr и получается двойная смена checked - скритом и кликом по чекбоксу.


function lightingLine() {
    var table = dID('contentTable');
    var node = table.getElementsByTagName("tr");
    for (var i=0;i<node.length;i++) {        
        node[i].onclick = function() {
            if(this.className != "contentFuncMenu" && this.className != "contentSort") {
                if(!this.getElementsByTagName("input")[0].checked) {                        
                    this.className += " select";  // Цвет по клику
                    this.getElementsByTagName("input")[0].checked = true;                        
                } else {
                    this.getElementsByTagName("input")[0].checked = false;
                    this.className = this.className.replace(/select/, "R"); // Цвет по клику    
                }                
                
            }
        }
        
    }
}


На данный момент вижу два выхода:

1) Заменить чекбоксы рисованными версиями.
2) Отлавливать - куда кликнули. Как это сделать в рамках функции - не знаю.

  Ответить  
 
 автор: devil943   (11.11.2009 в 20:22)   письмо автору
 
   для: devil943   (11.11.2009 в 19:41)
 

Проблема относительно решена вот так:

if(tr[i].className != "contentFuncMenu" && tr[i].className != "contentSort") {
            tr[i].getElementsByTagName("input")[0].onclick = function() {             
                this.checked = !this.checked;
            }
        }

  Ответить  
 
 автор: АЯ   (11.11.2009 в 20:24)   письмо автору
 
   для: devil943   (11.11.2009 в 19:41)
 

Як у вас всё хитро придумано :-))
Аж завидки берут:-)

В общем... функция должна быть ОДНА-ЕДИНСТВЕННАЯ.
И вешать её надо на тег <TABLE> на событие onclick.

Функция должна определять элемент, по которому кликнули - а в таблице это может быть только тег <TD> или какой-либо тег, входящий в тег <TD>. (Правда, если воспользуетесь обычным атрибутом BORDER="1", то по клику по бордеру таблицы вернется тег <TABLE> - это надо учесть в скрипте).

Итак, функцией определяете - по какому именно элементу кликнули:
1) если это тег <TABLE> - выходите из функции
2) если это не тег <TD>, то "поднимаетесь" через parentNode до тега <TD>
3) если это сам тег <TD>, то никуда уже "подниматься" не надо.

Для каждого <TD> есть свой parentNode - тег <TR>, в который этот <TD> входит.
И в каждой <TR> у вас имеется тег <TD>, где есть чекбокс.
Проверяете состояние чекбокса, метите его и раскрашиваете <TR>.

Учтите, что событие onclick по самому тегу <INPUT type="checkbox"> срабатывает ДО ТОГО, как изменяется состояние "галочки".

Всё.

  Ответить  
 
 автор: devil943   (11.11.2009 в 20:57)   письмо автору
 
   для: АЯ   (11.11.2009 в 20:24)
 

А почему нельзя вешать oclick на tr? Все всех браузерах все ок. ТАким образом мнге не нужно каждый раз смотреть, куда пользователь ткнул.

Про чекбокс учел, именно поэтому и не работало без новой приставки.

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

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