Я просматривал много вопросов/ответов, но до сих пор не смог решить мою проблему. Итак, у меня есть меню с раскрывающимся списком JS (при нажатии, а не наведении), но если я открою раскрывающийся список, и я нажму на второе меню, откроется другое раскрывающееся меню, но предыдущее не будет закрыто.JQuery выпадающее меню показать/скрыть несколько
Щелчок за пределами меню закрывает выпадающее меню, что отлично, но этого недостаточно, я хочу, чтобы первое выпадающее меню было закрыто даже при нажатии на второй!
<li><a onclick="myFunction_tools()" class="dropmenu" href="#">Tools</a></li>
<div id="myToolsDropdown" class="down">
<div>
Content here...
</div>
</div>
<li><a onclick="myFunction_forum()" class="dropmenu" href="#">Forum</a></li>
<div id="myForumDropdown" class="down">
<div>
Content here...
</div>
</div>
Вот JS:
function myFunction_tools() {
document.getElementById("myToolsDropdown").classList.toggle("show");
}
function myFunction_forum() {
document.getElementById("myForumDropdown").classList.toggle("show");
}
window.onclick = function(event) {
if (!event.target.matches('.dropmenu')) {
var dropdowns = document.getElementsByClassName("down");
var i;
for (i = 0; i < dropdowns.length; i++) {
var openDropdown = dropdowns[i];
if (openDropdown.classList.contains('show')) {
openDropdown.classList.remove('show');
}
}
}
}
$(".down").click(function(e){
e.stopPropagation();
});
Это не сработало с "dropmenu.active". Я попытался переименовать классы dropmenu в dropmenu_tools и dropmenu_forum, а затем в JS я использовал «if (! Event.target.matches («. Dropmenu_forum »)) {...} if (! Event.target.matches ('. Dropmenu_tools ')) {...} ", но с этим я получил тот же результат. – Phoenixy
Пробовал ли вы подход jQuery? В противном случае, таким образом, существует только один '' 'active'''-item, вы можете попытаться изменить условие на' '' if (! Event.target.matches ('. Active')) {...} '' ' – Dario
Пробовал тоже. Не работало, и это было еще хуже, потому что щелчок снаружи не скрывал выпадающего списка. – Phoenixy