我如何使这个onClick功能为多个下拉菜单工作?



我以前从未尝试过Javascript,环顾四周,但我发现的教程会花我几周的时间来弄清楚(注意力/焦点问题+我甚至不知道我想搜索什么词),我搜索的解决方案都没有解决它,我不知道足够从其他答案中推断出来。

有人能给我这个代码的一个例子(从w3School)扩展到也切换更多的下拉菜单?它必须像这个键盘一样可以使用。

目前它只处理ID为" dropperson "并且可以打开个人菜单,我需要"openmenu";函数也对ID "dropsites"并能够打开其他网站菜单。需要注意的是,按钮和受影响的iddiv是兄弟关系。

请不要使用JQuery。

JS:

function openMenu() {
document.getElementById("dropperso").classList.toggle("dropopen");
}

HTML:

<div class="dropdown">
<button onclick="openMenu()" class="drophover">Other Sites</button>
<div id="dropsites" class="dropdown-content">
A link
</div>
</div>
<div class="dropdown">
<button onclick="openMenu()" class="drophover">Personal</button>
<div id="dropperso" class="dropdown-content" style="right: 0;">
A link
A link
</div>
</div>

.dropopen css类所做的只是将。dropdown-content的显示从none变为block。

我试着搜索我的具体问题,所有我发现的方法都超出了我的理解能力,"使用jquery";(我受限于不能使用JQuery),或者"使用其他代码"(对我的代码不起作用)。

如果我只是复制整个东西并为每个菜单创建一个函数,它就可以工作,但我觉得这有点糟糕的意大利面条编码,如果没有一个可以学习的例子,我无法自己压缩它。

如果你能帮我解决这个问题,我将非常感激,这样我以后就可以使用它了,如果你能解释一下你是如何做到的,或者链接到文档的特定部分,解释你在使用什么,我将更加感激。

如果你想一键切换所有的下拉菜单,使用querySelectors来获取所有的下拉菜单,并像这样切换它们:

const dropdownMenus = document.querySelectorAll(".dropdown-content")
for(const menu of dropdownMenus){
menu.classList.toggle("dropopen")
}

但是如果你想用相同的函数来切换它们,而不是为每个菜单写一个函数,你可以这样做:

JS:

function openMenu(id) {
document.getElementById(id).classList.toggle("dropopen");
}

:

<div class="dropdown">
<button onclick="openMenu('dropsites')" class="drophover">Other Sites</button>
<div id="dropsites" class="dropdown-content">
A link
</div>
</div>
<div class="dropdown">
<button onclick="openMenu('dropperso')" class="drophover">Personal</button>
<div id="dropperso" class="dropdown-content" style="right: 0;">
A link
A link
</div>
</div>
function openMenu(id) {
document.getElementById(id).classList.toggle("dropopen");
}
<button onclick="openMenu('dropsites')" class="drophover">Personal</button>
<button onclick="openMenu('dropperso')" class="drophover">Personal</button>
<div class="drop-down flex-row-AI-center" data-dropdown>
<button class="drop-btn" data-dropdownBtn>Categories</button>
<div class="dropdown-content flex-col" data-dropdown-content>
<a href="#action">Action </a>
<a href="#adventure">Adventure</a>
<a href="#anime">Anime</a>
<a href="#comedy">Comedy</a>
<a href="#thriller">Thriller</a>
<a href="#fantasy">Fantasy</a>
</div>
</div>
</div>

你必须给所有的下拉菜单相同的id/class/dataset-attributes

function toggleDropDown(e) {
const isDropdownBtn = e.target.matches('[data-dropdownBtn]');
//as long as user clicking inside of dropdown it won't close
if (!isDropdownBtn && e.target.closest('[data-dropdown]') != null) return;
let currDropdown;
if (isDropdownBtn) {
currDropdown = e.target.closest('[data-dropdown]');
currDropdown.classList.add('active');
}
document.querySelectorAll('[data-dropdown-content].active').forEach(dropdowm => {
if(currDropdown === dropdowm) return
dropdowm.classList.remove('active')
})
}

最新更新