Forum Webscript.Ru

Программирование => JavaScript & JScript => Тема начата: besus от 06 Января 2006, 16:18:20

Название: Повесить событие на строку таблицы
Отправлено: besus от 06 Января 2006, 16:18:20
Вобщем, есть такая задачка.

Есть таблица. Нужно проанализировать ее, и на каждую строку повесить переход на определенный url. Вроде к таблице достучался, к строкам и ячейкам тоже. А вот установить элементу tr обработчик onClick почему-то не получается.
Подскажите, пожалуйста, чего я не так делаю. В JScript(как и в JavaScript) разбираюсь не очень, так что если что - извините.

Делаю так:


// Вешаем события перехода на строки грида
function bindEventsToDataGrid(gridId, selectText){
// грид
var table = document.getElementById(gridId);
// идем по строкам таблицы
for(var trIndex = 0; trIndex < table.childNodes[0].childNodes.length; trIndex++){
var curTr = table.childNodes[0].childNodes[trIndex];
// идем по ячейкам в строке
for (var tdIndex = 0; tdIndex < curTr.childNodes.length; tdIndex++){
var curTd = curTr.childNodes[tdIndex];
if (curTd.innerText == selectText){
// очищаем нафиг столбец выбора - его роль будет выполнять клик по строке
curTd.innerText = "";
// url перехода по клику
var transferUrl = "test:" + trIndex;

[B] curTr.onClick = "selectRow(\'" + transferUrl + "\')"; [/B]
}
}
}
}
function selectRow(transferUrl){
alert("selected!" + transferUrl);
}


Вешаю сие "творение" на body onLoad:


Все вроде отрабатывает, но по клику на строки таблицы ничего не происходит.

Спасибо.

Поиском вроде ничего подобного не нашел.
Название: Повесить событие на строку таблицы
Отправлено: noocky от 06 Января 2006, 23:53:06
У меня получилось так:


function bindEventsToDataGrid(gridId, selectText) {
var table = document.all[gridId];
for (var i = 0; i < table.rows.length; i++) {
for (var j = 0; j < table.rows[i].cells.length; j++) {
var curTd = table.rows[i].cells[j];
if (curTd.innerText == selectText) {
curTd.innerText = "";
curTd.parentElement.attachEvent("onclick", selectRow);
}
}
}
}

function selectRow() {
alert("selected!" + event.srcElement.parentElement.rowIndex);
}


Функция selectRow() такая потому что метод attachEvent не передает параметры функции, или я не знаю как он это делает. :)
Название: Повесить событие на строку таблицы
Отправлено: noocky от 06 Января 2006, 23:55:52
Слушай, besus, а какой у тебя windows?
Название: Повесить событие на строку таблицы
Отправлено: besus от 13 Января 2006, 14:48:32
XP PE, а что?
Название: Повесить событие на строку таблицы
Отправлено: besus от 13 Января 2006, 15:22:42
Цитировать


function bindEventsToDataGrid(gridId, selectText) {
var table = document.all[gridId];
for (var i = 0; i < table.rows.length; i++) {
for (var j = 0; j < table.rows[i].cells.length; j++) {
var curTd = table.rows[i].cells[j];
if (curTd.innerText == selectText) {
curTd.innerText = "";
curTd.parentElement.attachEvent("onclick", selectRow);
}
}
}
}

function selectRow() {
alert("selected!" + event.srcElement.parentElement.rowIndex);
}



Этот метод работает.. Но тут фигня одна. Мне нужно скрыть содержимое одной из ячеек строки, но СОХРАНИТЬ его, чтобы в функции selectRow() использовать(я думал его передавать - но не получается, значит его нужно хранить. Но видно его не должно быть).
На самом деле хотелось бы ссылочку на полное описание всех методов и свойств встроенных объектов javascript - я описания TD и TR не нашел нигде.
Название: Повесить событие на строку таблицы
Отправлено: noocky от 18 Января 2006, 17:21:01
Цитировать
На самом деле хотелось бы ссылочку на полное описание всех методов и свойств встроенных объектов javascript - я описания TD и TR не нашел нигде.


Поищи на msdn.microsoft.com, правда там все по ослику.

А содержимое попробуй через переменную передавать. В bindEventsToDataGrid назначать ей значение, а в selectRow() его юзать. Т.е. определить в скрипте обычную переменную (типа var current_value), а из функций к ней обращаться.
Название: Повесить событие на строку таблицы
Отправлено: besus от 18 Января 2006, 18:09:12
Спасибо, уже использовал вариант с анонимными функциями, предложенный здесь (http://gzip.rsdn.ru/Forum/Message.aspx?mid=1589973). Там, кстати, есть довольно интересное обсуждение нюансов.