@demidborodin
FrontEnd Developer

Как закрыть все toggle кроме одного?

Есть таблица, в ней постоянно дублируются вот такой кусок кода.
<table>
    <tbody>
        <td class="click">какой-то контент</td>
        <td class="description"> какой-то контент </td>

        <td class="click">какой-то контент</td>
        <td class="description"> какой-то контент </td>

         <td class="click">какой-то контент</td>
        <td class="description"> какой-то контент </td>
    </tbody>
</table>


Есть вот такой скрипт
$('table tbody tr.click').click(
    function () {
        $('.description').hide();
        $(this).addClass('open').next('.description').show();
    }
);


Сейчас это работает так.

Нажимаем на td.click - все td.description закрываются - next td.description открывается.
Мне нужно реализовать закрытие td.description по клику на td.click который его открыл (! и он не должен открыться снова !)

Пытался решить задачу добавлением класса к td.click но что-то идет не так, решил вернутся к исходному скрипту и спросить тут.
  • Вопрос задан
  • 2333 просмотра
Решения вопроса 2
5angel
@5angel
Фронтенд-лид
Брр. Из описания сложно понять, что вообще происходит и что нужно сделать, но я попытаюсь.

Если я правильно угадал, нужно сделать следующее:

$('table tbody tr.click').click(
  function () {
    var next = $(this).addClass('open').next('.description'),
        shown = (next).is('visible');

    $('.description').hide();

    if (!shown) {
      next.show(); // показать, если элемент скрыт
    }
  }
);
Ответ написан
@demidborodin Автор вопроса
FrontEnd Developer
$('table tbody tr.click').click(
    function () {
        var next = $(this).addClass('open').next('.description');
        if (!(next).is(':visible')) {
            $('.description').hide();
            next.show(); // показать, если элемент скрыт
        } else {
            next.hide();
        }
    }
);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Sanasol
@Sanasol Куратор тега JavaScript
нельзя просто так взять и загуглить ошибку
используйте toggle, а не show/hide
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы