Автор Тема: Повесить событие на строку таблицы  (Прочитано 5092 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн besus

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 4
  • +0/-0
  • 0
    • Просмотр профиля
Вобщем, есть такая задачка.

Есть таблица. Нужно проанализировать ее, и на каждую строку повесить переход на определенный 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

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 39
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Повесить событие на строку таблицы
« Ответ #1 : 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

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 39
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Повесить событие на строку таблицы
« Ответ #2 : 06 Января 2006, 23:55:52 »
Слушай, besus, а какой у тебя windows?

Оффлайн besus

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 4
  • +0/-0
  • 0
    • Просмотр профиля
Повесить событие на строку таблицы
« Ответ #3 : 13 Января 2006, 14:48:32 »
XP PE, а что?
Находя богатство — теряете совесть. Находя любовь — теряете рассудок. Находя истину — теряете веру. И только потеряв все — находите свободу

Оффлайн besus

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 4
  • +0/-0
  • 0
    • Просмотр профиля
Повесить событие на строку таблицы
« Ответ #4 : 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

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 39
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Повесить событие на строку таблицы
« Ответ #5 : 18 Января 2006, 17:21:01 »
Цитировать
На самом деле хотелось бы ссылочку на полное описание всех методов и свойств встроенных объектов javascript - я описания TD и TR не нашел нигде.


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

А содержимое попробуй через переменную передавать. В bindEventsToDataGrid назначать ей значение, а в selectRow() его юзать. Т.е. определить в скрипте обычную переменную (типа var current_value), а из функций к ней обращаться.

Оффлайн besus

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 4
  • +0/-0
  • 0
    • Просмотр профиля
Повесить событие на строку таблицы
« Ответ #6 : 18 Января 2006, 18:09:12 »
Спасибо, уже использовал вариант с анонимными функциями, предложенный здесь. Там, кстати, есть довольно интересное обсуждение нюансов.
Находя богатство — теряете совесть. Находя любовь — теряете рассудок. Находя истину — теряете веру. И только потеряв все — находите свободу

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28