jsfiddle.net/6bdt4149/1
// EDIT: в комментариях попросили уточнить, что происходит.
При клике на TR вызывается функция clickTr. Само собой, что это событие вызовется при клике на дочерние элементы (конечно, есть всякие bubbling/useCapture, подробнее -
https://developer.mozilla.org/ru/docs/Web/API/Even...).
У всех обработчиков событий первым параметром передается объект Event. Ключ target содержит элемент, который вызвал событие.
Мы проходим по всем input в TR. Логично, что чекбокс работает прекрасно сам по себе, и если он является Event.target, то для него наш обработчик выполнять не надо.
Надеюсь, объяснил популярно.
var tr = document.getElementsByTagName("tr"),
i = tr.length;
while (i--) {
tr[i].onclick = clickTr;
}
function clickTr(event) {
var inputs = this.getElementsByTagName('input');
for (var x = 0; x < inputs.length; x++) {
if (inputs[x] !== event.target && inputs[x].type == 'checkbox') {
inputs[x].checked = !(inputs[x].checked);
}
}
}