dm84ya08
@dm84ya08
Самоучка

Как правильно реализовать выделение checkbox при клике на строку таблицы tr?

Удалось реализовать почти рабочий пример на jsfiddle.
В принципе при клике на tr checkbox меняет своё состояние. Но есть одна проблема:

При нажатии непосредственно на checkbox он видимо сначала меняет состояние от клика, а потом срабатывает мой скрипт и checkbox снова меняет своё состояние на исходное.

Хочу сделать имитацию label, но в таблице.

Подскажите, пожалуйста, как решить данную проблему?
  • Вопрос задан
  • 1413 просмотров
Решения вопроса 1
miraage
@miraage
Старый прогер
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);
        }
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 нояб. 2024, в 12:20
10000 руб./за проект
22 нояб. 2024, в 11:53
3000 руб./за проект
22 нояб. 2024, в 11:51
20000 руб./за проект