Если структура в точности такая, вы можете использовать
this.parentNode.parentNode.id
Конечно, это будет тормозить, как только структура изменится.
Вместо привязки к событию click
, вы должны привязаться к событию change
.Затем вы также учитываете изменения, сделанные с помощью клавиатуры.
Поскольку каждый обработчик делает то же самое, вы должны использовать всплывающее событие .Вместо того, чтобы прикреплять обработчик событий к каждому элементу input
в вашем HTML, присоедините к таблице только один обработчик :
var table = document.getElementById('tableId');
table.onchange = function(event) {
event = event || window.srcElement; // IE specials
var target = event.target || event.srcElement; // IE specials
// was the element a checkbox?
if(target.nodeName === "INPUT" && target.type === "checkbox") {
// find parent row
var parent = target.parentNode;
while(parent.nodeName !== "TR" && parent !== null) {
parent = parent.parentNode;
}
if(parent) { // we found the row
toggle(parent.id);
}
}
};
Это выглядит сложнее, но имеет то преимущество, что выне нужно писать onclick="toggle(this.id)"
на каждом input
элементе.
DEMO