Как отобразить содержимое элементов в раскрывающемся списке в меню активной вкладки?

Я пытаюсь показать содержимое выпадающего списка в активном меню, я пробовал несколько функций в jquery и js, но не смог заставить его работать.

Функция Jquery, показывающая обычное содержимое вкладок, но не содержимое вкладок в раскрывающемся списке.

Функция Javascript отключает все вкладки и не показывает содержимое ни для одной из них.

Вот мои коды:

$(document).ready(function () {
  // Show the dropdown when the "View All" link is clicked
  $(".dropdown").click(function (e) {
    e.stopPropagation(); // Prevent the event from propagating to the parent element
    $(".dropdown-tab").toggleClass("active");
  });

  // Hide the dropdown when the user clicks outside of it
  $(document).click(function (e) {
    if (!$(e.target).closest(".dropdown-tab").length) {
      $(".dropdown-tab").removeClass("active");
    }
  });

  // Switch between tabs
  $(".tabs li.tab-link").click(function () {
    var tab_id = $(this).attr("data-tab");

    $(".tabs li").removeClass("current");
    $(".tab-content").removeClass("current");

    $(this).addClass("current");
    $("#" + tab_id).addClass("current");
  });

  // Show tab content when drop-link is clicked
  $(".dropdown-tab .drop-link").click(function () {
    var tab_id = $(this).attr("data-tab");

    $(".tabs li").removeClass("current");
    $(".tab-content").removeClass("current");

    $(".dropdown-tab").removeClass("active");
    $("#" + tab_id).addClass("current");
    $(".tabs li[data-tab='" + tab_id + "']").addClass("current");
  });
});
.cat-tab {
  position: relative;
  width: 100%;
  height: auto;
  margin-bottom: 30px;
}

.tabs {
  position: relative;
  margin: 0px;
  padding: 0px;
  list-style: none;
  border-bottom: 2px solid #e44e4e;
  z-index: 1;
}

.tabs li {
  color: #222;
  display: inline-block;
  padding: 10px 15px;
  cursor: pointer;
}

.tabs li.current {
  background-color: #e44e4e;
  color: #fff;
}

.tabs li.tab-link:last-child {
  float: right;
}

.tab-content {
  display: none;
  background: #fff;
  padding: 15px;
}

.tab-content.current {
  display: inherit;
}

.tabs .dropdown-tab {
  display: none;
}

.tabs .dropdown-tab.active {
  display: block;
}

.tabs .dropdown {
  position: relative;
}

.dropdown-tab {
  position: absolute;
  width: 270px;
  top: 100%;
  right: 0;
  background-color: #fff;
  border: 1px solid #ccc;
  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
  padding: 10px;
  z-index: 90999;
}

.drop-link {
  display: block;
  color: #222;
  padding: 10px 15px;
  cursor: pointer;
}

.drop-link:hover {
  background-color: #f2f2f2;
}

@media screen and (max-width: 500px) {
  ul.tabs > li.dropdown {
    display: block;
  }
}
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class = "cat-tab">
  <ul class = "tabs">
    <li class = "tab-link current" data-tab = "tab-1">Tab One</li>
    <li class = "tab-link" data-tab = "tab-2">Tab Two</li>
    <li class = "tab-link" data-tab = "tab-3">Tab Three</li>
    <li class = "tab-link" data-tab = "tab-4">Tab Four</li>
    <li class = "tab-link"><a href = "#" class = "dropdown">View All</a>
      <ul class = "dropdown-tab">
        <li class = "drop-link current" data-tab = "tab-5">Tab 5</li>
        <li class = "drop-link" data-tab = "tab-6">Tab 6</li>
        <li class = "drop-link" data-tab = "tab-7">Tab 7</li>
        <li class = "drop-link" data-tab = "tab-8">Tab 8</li>
        <li class = "drop-link" data-tab = "tab-9">Tab 9</li>
      </ul>
    </li>
  </ul>

  <div id = "tab-1" class = "tab-content current">sometext 1</div>
  <div id = "tab-2" class = "tab-content">sometext 2</div>
  <div id = "tab-3" class = "tab-content">sometext 3</div>
  <div id = "tab-4" class = "tab-content">sometext 4</div>
  <div id = "tab-5" class = "tab-content">sometext 5</div>
  <div id = "tab-6" class = "tab-content">sometext 6</div>
  <div id = "tab-7" class = "tab-content">sometext 7</div>
  <div id = "tab-8" class = "tab-content">sometext 8</div>
  <div id = "tab-9" class = "tab-content">sometext 9</div>
</div>

Я пробовал javascript, вот так:

function toggleDropdown() {
  var dropdown = document.querySelector('.dropdown-tab');
  if (dropdown.style.display === 'block') {
    dropdown.style.display = 'none';
  } else {
    dropdown.style.display = 'block';
    var currentTab = document.querySelector('.tab-link.current');
    if (currentTab) {
      var currentTabId = currentTab.getAttribute('data-tab');
      var currentContent = document.getElementById(currentTabId);
      currentTab.classList.remove('current');
      currentContent.classList.remove('current');
    }
  }
  var tabContents = document.querySelectorAll('.tab-content');
  tabContents.forEach(function(content) {
    if (content.classList.contains('current')) {
      content.classList.remove('current');
    }
  });
  var dropdownTabs = document.querySelectorAll('.drop-link');
  dropdownTabs.forEach(function(tab) {
    tab.addEventListener('click', function() {
      var tabId = this.getAttribute('data-tab');
      var tabContent = document.getElementById(tabId);
      dropdownTabs.forEach(function(tab) {
        tab.classList.remove('current');
      });
      tabContents.forEach(function(content) {
        content.classList.remove('current');
      });
      tab.classList.add('current');
      tabContent.classList.add('current');
      dropdown.style.display = 'none';
    });
  });
}

И определенная функция в HTML:

<li class = "tab-link"><a href = "#" class = "dropdown">View All</a>

Не могли бы вы создать образец в песочнице кода, так будет легче найти проблему и сотрудничать.

SARAN SURYA 15.02.2023 06:11
Типы данных JavaScript
Типы данных JavaScript
В JavaScript существует несколько типов данных, включая примитивные типы данных и ссылочные типы данных. Вот краткое объяснение различных типов данных...
CSS Flex: что должен знать каждый разработчик
CSS Flex: что должен знать каждый разработчик
CSS Flex: что должен знать каждый разработчик Модуль flexbox, также известный как гибкий модуль разметки box, помогает эффективно проектировать и...
Введение в раздел &quot;Заголовок&quot; в HTML
Введение в раздел "Заголовок" в HTML
Говорят, что лучшее о человеке можно увидеть только изнутри, и это относится и к веб-страницам HTML! Причина, по которой некоторые веб-страницы не...
Как React Helmet спасает меня при разделении файлов CSS?
Как React Helmet спасает меня при разделении файлов CSS?
Многие новички могут столкнуться с проблемой, когда одна страница с CSS наследует свойства от другой страницы с другим CSS. У меня было много проблем,...
Потяните за рычаг выброса энергососущих проектов
Потяните за рычаг выброса энергососущих проектов
На этой неделе моя команда отменила проект, над которым я работал. Неделя усилий пошла насмарку.
Руководство для начинающих по веб-разработке: HTML, CSS и JavaScript.
Руководство для начинающих по веб-разработке: HTML, CSS и JavaScript.
Добро пожаловать, мои коллеги по интернету, в захватывающий мир веб-разработки! Дорогие мои начинающие, я здесь, чтобы провести вас через основы HTML,...
1
1
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема :

Когда вы нажимаете на drop-link li, это также вызывает другой обработчик событий, например: $(".tabs li.tab-link")..., что приводит к скрытию вкладок.

Решение :

Один из способов решить эту проблему — исключить dropdown li из вашего обработчика событий, то есть: $(".tabs li:not(.dropdown_menu)").. . Кроме того, вы можете удалить часть повторяющегося кода, потому что оба обработчика событий выполняют одинаковую работу.

Демонстрационный код:

$(document).ready(function() {
  // Show the dropdown when the "View All" link is clicked
  $(".dropdown").click(function(e) {
    e.stopPropagation(); // Prevent the event from propagating to the parent element
    $(".dropdown-tab").toggleClass("active");
  });

  // Hide the dropdown when the user clicks outside of it
  $(document).click(function(e) {
    if (!$(e.target).closest(".dropdown-tab").length) {
      $(".dropdown-tab").removeClass("active");
    }
  });

  //excluding other selector...
  $(".tabs li:not(.dropdown_menu)").click(function() {
    show_hide_tabs(this)
  });
  $(".tabs li.drop-link").click(function() {
    show_hide_tabs(this)
  });

  function show_hide_tabs(el) {
    var tab_id = $(el).attr("data-tab");
    $(".tabs li,.tab-content").removeClass("current");
    $(".dropdown-tab").removeClass("active");
    $("#" + tab_id).addClass("current");
    $(".tabs li[data-tab='" + tab_id + "']").addClass("current");
  }
});
.cat-tab {
  position: relative;
  width: 100%;
  height: auto;
  margin-bottom: 30px;
}

.tabs {
  position: relative;
  margin: 0px;
  padding: 0px;
  list-style: none;
  border-bottom: 2px solid #e44e4e;
  z-index: 1;
}

.tabs li {
  color: #222;
  display: inline-block;
  padding: 10px 15px;
  cursor: pointer;
}

.tabs li.current {
  background-color: #e44e4e;
  color: #fff;
}

.tabs li.tab-link:last-child {
  float: right;
}

.tab-content {
  display: none;
  background: #fff;
  padding: 15px;
}

.tab-content.current {
  display: block;
}

.tabs .dropdown-tab {
  display: none;
}

.tabs .dropdown-tab.active {
  display: block;
}

.tabs .dropdown {
  position: relative;
}

.dropdown-tab {
  position: absolute;
  width: 270px;
  top: 100%;
  right: 0;
  background-color: #fff;
  border: 1px solid #ccc;
  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
  padding: 10px;
  z-index: 90999;
}

.drop-link {
  display: block;
  color: #222;
  padding: 10px 15px;
  cursor: pointer;
}

.drop-link:hover {
  background-color: #f2f2f2;
}

@media screen and (max-width: 500px) {
  ul.tabs>li.dropdown {
    display: block;
  }
}
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class = "cat-tab">
  <ul class = "tabs">
    <li class = "tab-link current" data-tab = "tab-1">Tab One</li>
    <li class = "tab-link" data-tab = "tab-2">Tab Two</li>
    <li class = "tab-link" data-tab = "tab-3">Tab Three</li>
    <li class = "tab-link" data-tab = "tab-4">Tab Four</li>
    <!--added here one extra class-->
    <li class = "tab-link dropdown_menu"><a href = "#" class = "dropdown">View All</a>
      <ul class = "dropdown-tab">
        <li class = "drop-link" data-tab = "tab-5">Tab 5</li>
        <li class = "drop-link" data-tab = "tab-6">Tab 6</li>
        <li class = "drop-link" data-tab = "tab-7">Tab 7</li>
        <li class = "drop-link" data-tab = "tab-8">Tab 8</li>
        <li class = "drop-link" data-tab = "tab-9">Tab 9</li>
      </ul>
    </li>
  </ul>

  <div id = "tab-1" class = "tab-content current">sometext 1</div>
  <div id = "tab-2" class = "tab-content">sometext 2</div>
  <div id = "tab-3" class = "tab-content">sometext 3</div>
  <div id = "tab-4" class = "tab-content">sometext 4</div>
  <div id = "tab-5" class = "tab-content">sometext 5</div>
  <div id = "tab-6" class = "tab-content">sometext 6</div>
  <div id = "tab-7" class = "tab-content">sometext 7</div>
  <div id = "tab-8" class = "tab-content">sometext 8</div>
  <div id = "tab-9" class = "tab-content">sometext 9</div>
</div>

Вопрос для информации! задам еще вопрос. Можно ли использовать каждую функцию для нескольких вкладок?

DLK 15.02.2023 11:28

Да, вы можете, но что именно вам нужно сделать, зациклившись?

Swati 15.02.2023 12:03

У меня есть несколько вкладок на одной странице, и я хочу использовать один и тот же код для всех вкладок, а не повторять код для каждой вкладки.

DLK 15.02.2023 12:05

Да, вы можете. Дайте мне знать, как только вы добавите еще один вопрос, мы это проверим.

Swati 15.02.2023 13:14

Не могли бы вы помочь с этим вопросом, пожалуйста? stackoverflow.com/q/75461119/19168006

DLK 15.02.2023 15:17

Другие вопросы по теме