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, время: 19:42. |