#jquery
#jquery
Вопрос:
У меня есть функция jQuery (ниже), которая работает нормально. Это для выпадающей кнопки, которая запускается при событии щелчка. Я ищу способ очистить код и сделать его намного проще. Спасибо.
jQuery
$("#dropbtn1").click(function() {
$(".dropdown-content1").toggleClass("show-dropdown");
$(".dropdown-content2, .dropdown-content3").removeClass("show-dropdown");
});
$("#dropbtn2").click(function() {
$(".dropdown-content2").toggleClass("show-dropdown");
$(".dropdown-content1, .dropdown-content3").removeClass("show-dropdown");
});
$("#dropbtn3").click(function() {
$(".dropdown-content3").toggleClass("show-dropdown");
$(".dropdown-content1, .dropdown-content2").removeClass("show-dropdown");
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="dropdown">
<li><button id="dropbtn1" type="button">Dropdown</button>
<div class="menu dropdown-content1">
<a href="#home">Home</a>
<a href="#about">About</a>
<a href="#contact">Contact</a>
</div>
</li>
<li><button id="dropbtn2" type="button">Dropdown</button>
<div class="menu dropdown-content2">
<a href="#home">Home</a>
<a href="#about">About</a>
<a href="#contact">Contact</a>
</div>
</li>
<li><button id="dropbtn3" type="button">Dropdown</button>
<div class="menu dropdown-content3">
<a href="#home">Home</a>
<a href="#about">About</a>
<a href="#contact">Contact</a>
</div>
</li>
</ul>
Комментарии:
1. проверьте мой ответ
Ответ №1:
Добавьте класс к каждой выпадающей кнопке и измените код на
<ul class="dropdown">
<li><button id="dropbtn1" type="button" class="drop-btn">Dropdown</button>
<div class="menu dropdown-content1">
<a href="#home">Home</a>
<a href="#about">About</a>
<a href="#contact">Contact</a>
</div>
</li>
<li><button id="dropbtn2" type="button" class="drop-btn">Dropdown</button>
<div class="menu dropdown-content2">
<a href="#home">Home</a>
<a href="#about">About</a>
<a href="#contact">Contact</a>
</div>
</li>
<li><button id="dropbtn3" type="button" class="drop-btn">Dropdown</button>
<div class="menu dropdown-content3">
<a href="#home">Home</a>
<a href="#about">About</a>
<a href="#contact">Contact</a>
</div>
</li>
</ul>
и тогда вы можете написать js как
$(".drop-btn").click (function() {
$(".menu").hide();
$(this).siblings('.menu').toggle();
});
и немного css
.menu{
display:none;
}
проверьте эту скрипку
Обновить
$(".drop-btn").click (function() {
$(this).siblings('.menu').toggle();
});
Удалите $('.menu').hide()
, чтобы пользователь переключал работу в соответствии с вашим требованием. Проверьте эту ОБНОВЛЕННУЮ СКРИПКУ
Комментарии:
1. Работает, но я хочу, чтобы пользователь снова нажал на кнопку, чтобы включить или выключить дочерние элементы. В настоящее время я должен нажать на другую кнопку, чтобы отключить предыдущую. Надеюсь, это имеет смысл.
2. @user22768 я обновил скрипку. Посмотрите на это jsfiddle.net/melvinstanly/uj4oa5rL/8
3. @user22768 Надеюсь, это сработает. Пожалуйста, примите это как ответ.
4. Это работает, но у меня одновременно отображаются все три выпадающих списка, что не то, что я хотел. Приведенный ниже код @iArcadia делает именно то, что я хочу, чтобы он делал. Я все еще благодарен за вашу помощь. Спасибо!
5. @fridayikon я дал вам код для открытия одного выпадающего списка за раз. Также одновременно открывайте несколько выпадающих списков. Оба не соответствовали вашим требованиям?
Ответ №2:
Просто добавьте прослушиватель событий в список jQuery, содержащий все ваши кнопки. Затем закройте их родственное меню и откройте соответствующее.
$('.dropdown > li > button').click(function() {
const jSiblingMenus = $(this).siblings('.menu'),
isAlreadyOpened = jSiblingMenus.css('display') !== 'none';
$('.dropdown > li > .menu').hide();
(isAlreadyOpened) ? jSiblingMenus.hide() : jSiblingMenus.show();
});
.dropdown > li > .menu {
display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="dropdown">
<li>
<button type="button">Dropdown</button>
<div class="menu">
<a href="#home">Home</a>
<a href="#about">About</a>
<a href="#contact">Contact</a>
</div>
</li>
<li>
<button type="button">Dropdown</button>
<div class="menu">
<a href="#home">Home</a>
<a href="#about">About</a>
<a href="#contact">Contact</a>
</div>
</li>
<li>
<button type="button">Dropdown</button>
<div class="menu dropdown-content">
<a href="#home">Home</a>
<a href="#about">About</a>
<a href="#contact">Contact</a>
</div>
</li>
</ul>
Ответ №3:
По щелчку мыши вы можете удалить класс «show-dropdown» для всех divs, у которых есть класс, начинающийся с «dropdown-content» (возможно, вы добавляете другой класс, который все они разделяют), а затем переключить «show-dropdown» на текущий связанный узел.