|
|
|
| Цель - сделать удобную среду для работы с новостями и статьями на сайте. В данном случае создаю таблицу со списками материалов. У каждой строки есть чекбокс, содержащий идентификатор материала.
Цель - сделать каждую строку таблицы кликабельной, чтобы после клика строка закрашивалась определенным цветом, а чекбокс выделялся. На данный момент проблема в том, что ко клику по чекбоксу ничего не происходит (потому что событие 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 в 19:41)
| | Проблема относительно решена вот так:
if(tr[i].className != "contentFuncMenu" && tr[i].className != "contentSort") {
tr[i].getElementsByTagName("input")[0].onclick = function() {
this.checked = !this.checked;
}
}
|
| |
|
|
|
|
|
|
|
для: 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"> срабатывает ДО ТОГО, как изменяется состояние "галочки".
Всё. | |
|
|
|
|
|
|
|
для: АЯ
(11.11.2009 в 20:24)
| | А почему нельзя вешать oclick на tr? Все всех браузерах все ок. ТАким образом мнге не нужно каждый раз смотреть, куда пользователь ткнул.
Про чекбокс учел, именно поэтому и не работало без новой приставки. | |
|
|
|