td.attachEvent('onclick', newrowdelete); Как привязать событие с параметром?
Здравствуйте!
Помогите пожалуйста: Нужно к объекту - ячейки таблицы (td) привязать событие, по которому будет запускаться функция и, чтобы в функцию передавался параметр.
td.attachEvent('onclick', newrowdelete);
newrowdelete - имя функции и, соответственно, есть функция:
function newrowdelete(rowindex)
{
...
}
нужно так привязать событие onClick, чтобы при нажатии на объект в функцию newrowdelete передавался параметр - номер удаляемой строки что-то вроде
td.attachEvent('onclick', newrowdelete(rowindex));
но так, конечно, не работает. |
а не лучше переписать newrowdelete, чтобы она использовала this для поиска нужной строки или определяла ее другим образом (не через параметр)?
|
решение x-yuri наиболее правильное с точки зрения хорошего кодирования.
от себя добавлю только образец кода, и второй "более простой" способ x-yuri:
function newrowdelete(rowindex)
{
var row=this.parentNode;//теперь row указывает на строку, содержащую td вызвавший событие.его и удлаяем, насколько понимаю
...
}
"более простой" способ:
td.attachEvent('onclick', (function(temp){return function(){newrowdelete(temp)})(rowindex) );
|
Нашёл выход
Большое спасибо за ответы!
нашёл другой выход, по-другому идентифицировать строку:
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 и на будущее мне он пригодится. |
странно, что работает, на самом деле. activeElement - это элемент в фокусе (td по умолчанию не может быть в фокусе). Кроме того, activeElement появилась в HTML 5 и я не уверен в ее кроссбраузерности. Может и не прав - сужу по информации в интернете (а не по опыту ее использования)
по какому принципу определяется удаляемая строка? Последняя строка таблицы? Тогда лучше
var t = d.getElementById('tnew');
t.deleteRow( t.rows-1 );
|
| Часовой пояс GMT +3, время: 02:47. |