Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.03.2009, 06:29
Новичок на форуме
Отправить личное сообщение для serge! Посмотреть профиль Найти все сообщения от serge!
 
Регистрация: 23.03.2009
Сообщений: 2

td.attachEvent('onclick', newrowdelete); Как привязать событие с параметром?
Здравствуйте!
Помогите пожалуйста:
Нужно к объекту - ячейки таблицы (td) привязать событие, по которому будет запускаться функция и, чтобы в функцию передавался параметр.
td.attachEvent('onclick', newrowdelete);


newrowdelete - имя функции и, соответственно, есть функция:

function newrowdelete(rowindex)
{
  ...
}

нужно так привязать событие onClick, чтобы при нажатии на объект в функцию newrowdelete передавался параметр - номер удаляемой строки
что-то вроде
td.attachEvent('onclick', newrowdelete(rowindex));
но так, конечно, не работает.
Ответить с цитированием
  #2 (permalink)  
Старый 23.03.2009, 07:41
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

а не лучше переписать newrowdelete, чтобы она использовала this для поиска нужной строки или определяла ее другим образом (не через параметр)?
Ответить с цитированием
  #3 (permalink)  
Старый 23.03.2009, 07:59
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

решение x-yuri наиболее правильное с точки зрения хорошего кодирования.
от себя добавлю только образец кода, и второй "более простой" способ x-yuri:
function newrowdelete(rowindex)
{
var row=this.parentNode;//теперь row указывает на строку, содержащую td вызвавший событие.его и удлаяем, насколько понимаю
  ...
}

"более простой" способ:
td.attachEvent('onclick', (function(temp){return function(){newrowdelete(temp)})(rowindex) );
Ответить с цитированием
  #4 (permalink)  
Старый 23.03.2009, 09:07
Новичок на форуме
Отправить личное сообщение для serge! Посмотреть профиль Найти все сообщения от serge!
 
Регистрация: 23.03.2009
Сообщений: 2

Нашёл выход
Большое спасибо за ответы!
нашёл другой выход, по-другому идентифицировать строку:
function newrowdelete()
{
  var rowindex=d.activeElement.id;
  var tbody = d.getElementById('tnew').getElementsByTagName('TBODY')[0];
  tbody.removeChild(d.getElementById('r'+rowindex)); //удаление
  form_box.tnew_strkolvo.value=Number(form_box.tnew_strkolvo.value)-1;
}

function addrow()
{
  var tbody = d.getElementById('tnew').getElementsByTagName('TBODY')[0];
  var tr = d.createElement("TR");
  tbody.appendChild(tr);
  ...
  //тут ещё создавал несколько ячеек со всякими атрибутами, как ниже:
  ...
  td = d.createElement("TD");
  tr.appendChild(td);
  //на эту, последнюю ячейку, привязал событие
  td.attachEvent('onclick', newrowdelete);
  //в скрытом поле хранится индекс создаваемой строки = колву строк
  var tnew_strkolvo=Number(form_box.tnew_strkolvo.value)+1;
  //на строку id, а на ячейку, по которой onClick - индекс строки
  tr.setAttribute('id', 'r'+tnew_strkolvo);
  td.setAttribute('id', tnew_strkolvo);
  form_box.tnew_strkolvo.value=tnew_strkolvo;
}


Сделать с помощью this не получилось, я ещё плоховато в Javascript разбираюсь, но буду знать хотя бы что есть такой this и на будущее мне он пригодится.
Ответить с цитированием
  #5 (permalink)  
Старый 23.03.2009, 18:38
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

странно, что работает, на самом деле. activeElement - это элемент в фокусе (td по умолчанию не может быть в фокусе). Кроме того, activeElement появилась в HTML 5 и я не уверен в ее кроссбраузерности. Может и не прав - сужу по информации в интернете (а не по опыту ее использования)

по какому принципу определяется удаляемая строка?
Последняя строка таблицы? Тогда лучше
var t = d.getElementById('tnew');
t.deleteRow( t.rows-1 );
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вызвать событие после события определенного в onchange Наталья Events/DOM/Window 2 12.09.2009 13:51
Как имитировать событие мыши Andrey_V Общие вопросы Javascript 4 10.11.2008 16:39
как проверить поддеружет браузер определенное событие? GOll Элементы интерфейса 9 24.07.2008 14:40
Как вставить событие внутрь document.write Vivasvan Events/DOM/Window 8 13.06.2008 20:02
Как обработать событие Cresh Events/DOM/Window 1 31.05.2008 06:17