如何一次只打开一个下拉列表
How to only open one dropdown at a time
我的网站上有几个下拉列表,我不知道如何让它们一次只打开一个。我试着先默认隐藏它们,但似乎仍然可以同时打开所有。。。我是不是错过了什么?非常感谢。
这是HTML:
<div class="click-nav">
<ul>
<li>
<a href="#">Dropdown</a>
<ul class="sub">
<li><a href="#">One</a></li>
<li><a href="#">Two</a></li>
<li><a href="#">Three</a></li>
<li><a href="#">Four</a></li>
</ul>
</li>
</ul>
</div>
这是js:
$(function () {
$('.click-nav > ul').toggleClass('no-js js');
$('.click-nav .js ul').hide();
$('.click-nav .js').click(function(e) {
$('.click-nav .js ul').slideToggle(200);
e.preventDefault();
$('.clicker').toggleClass('active');
e.stopPropagation();
});
$(document).click(function() {
if ($('.click-nav .js ul').is(':visible')) {
$('.click-nav .js ul', this).slideUp();
$('.clicker').removeClass('active');
}
});
});
试试这个。由于您已经有了$(function()
,这是document.ready
的快捷方式,因此您不需要另一个document.ready
。
$(function () {
$('.click-nav > ul').toggleClass('no-js js');
$('.click-nav .js ul').hide();
$('.click-nav .js').click(function(e)
{
$(this).find('ul').slideToggle(400);
$('.click-nav .js ul').not($(this).find('ul')).hide();
e.preventDefault();
e.stopPropagation();
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div class="click-nav">
<ul>
<li>
<a href="#">Dropdown</a>
<ul class="sub">
<li><a href="#">One</a></li>
<li><a href="#">Two</a></li>
<li><a href="#">Three</a></li>
<li><a href="#">Four</a></li>
</ul>
</li>
</ul>
<ul>
<li>
<a href="#">Dropdown</a>
<ul class="sub">
<li><a href="#">One</a></li>
<li><a href="#">Two</a></li>
<li><a href="#">Three</a></li>
<li><a href="#">Four</a></li>
</ul>
</li>
</ul>
</div>
JSFiddle
这可能有点旧,但我已经为每个onclick使用了唯一的id来编写脚本,在我的情况下,我使用了IMG而不是按钮。
下面的代码是一个带有onlick的图像的下拉列表,当单击该图像时,该图像将被发送到myFunction中,同时还有一个来自数据库的唯一帖子id,该id必须是echo'd。myDropdown也用于通过添加toggle"来显示下拉列表;显示";到其中的下拉内容类。
此外,myDropdown本身是myDropdownUNIQUEPOSTID独有的。
<div id="dropduttonholder"><img width="20" height="20" style="cursor:pointer;"
onclick="myFunction(<?php echo $postid['streamitem_id'] ?>);"
class="dropbtn" src="../newimages/postdropimg.png" /></div>
<div class="dropdown" id="<?php echo $postid['streamitem_id'] ?>">
<div id="myDropdown<?php echo $postid['streamitem_id'] ?>" class="dropdown-content">
<a href="#"></a>
<a href="#"></a>
<a href="#"></a>
</div>
</div>
onlick事件发送到的以下脚本将首先查找打开的下拉列表的任何实例,并将其传递到CloseItemsOpen函数中,以从任何下拉内容类中删除"show"。
然后,它将下拉当前单击的下拉列表,还允许您单击元素外部以关闭它。
我还通过target.matches添加了对下拉列表内容的返回,以阻止当前打开的任何下拉列表在单击内部时关闭。
<script>
function closeOpenItems() {
openMenus = document.querySelectorAll('.dropdown-content');
openMenus.forEach(function(menus) {
menus.classList.remove('show');
});
}
/* Javascript only */
function myFunction(streamitem_id) {
closeOpenItems();
var acc = document.getElementById("myDropdown"+streamitem_id).classList.toggle("show");
}
// Closes the menu in the event of outside click
window.onclick = function(event) {
if (event.target.matches('.dropdown-content *')) {
return;
}
if (!event.target.matches('.dropbtn')) {
var dropdowns =
document.getElementsByClassName("dropdown-content");
var i;
for (i = 0; i < dropdowns.length; i++) {
var openDropdown = dropdowns[i];
if (openDropdown.classList.contains('show')) {
openDropdown.classList.remove('show');
}
}
}
}
</script>
我相信这是因为您没有为任何下拉列表分配任何标识参数,而这里只有一个具有不同子导航项的下拉列表。或者你把它们称为单独的下拉列表?我认为应该为每个元素分配不同的id,然后使用getelementbyid
jquery函数。我就是这么做的。我不知道这对你是否有效。
- 如何使用jquery将所选项目从一个下拉组列表(optgroup)移动到另一个下拉列表(optgroup)
- 在另一个下拉列表中的选择上切换下拉列表中选项的可见性
- 引导程序在单击另一个下拉列表时关闭下拉列表
- 如何只制作一个下拉列表在单击时下拉
- 如何使用 asp.net 中的另一个下拉列表更改下拉列表选定的索引和可见性
- 如何填充下拉列表,从javascript中的另一个下拉列表中排除任何一个选项
- 选择“第一个下拉列表”以与另一个下拉列表的值相同
- 我创建了一个下拉列表,以及如何显示所选项目的其他列数据
- 如何根据另一个下拉列表的选择来填充多个下拉列表
- 如何从另一个下拉列表中隐藏选择基于下拉列表的值
- Dropdown基于jsp Struts中的另一个下拉列表
- 如何 从另一个下拉列表中选择一个值时禁用下拉值
- 使用 ajax 和 JSP Servlet 根据选择的上一个下拉列表填充下拉列表
- 如何创建共享单个列表的链接下拉列表,并确保只能在一个下拉列表中选择每个值
- 将下拉列表中的值添加到 KnockoutJS 中另一个下拉列表中的任何值集
- 如何将一个模式中下拉列表中的选定值传递到另一个模式 t 中的另一个下拉列表
- 根据另一个下拉列表中的选择从数据库下拉下拉选项
- 从 xml 文件创建一个下拉列表,不带重复值.我需要数组吗?
- jQuery根据条件不显示下一个下拉列表
- 如果另一个下拉列表选择发生更改,则重置另一个下拉列表