私は多くの質問/回答を見てきましたが、まだ私の問題を解決できませんでした。 私はJSドロップダウンメニューを持っています(ホバーではなくクリック)。しかし、ドロップダウンを開いて2番目のメニューをクリックすると、別のドロップダウンが開きますが、前のドロップダウンは閉じません。Jqueryドロップダウンメニュー複数表示/非表示
メニューの外側をクリックすると、ドロップダウンが閉じられますが、十分ではありません。2番目のメニューをクリックしても最初のドロップダウンを終了します。ここで
<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_toolsとdropmenu_forumへのdropmenuクラスの名前を変更しようとしましたが、JSでは "if(!event.target.matches( '。dropmenu_forum')){...} if(!event.target.matches( '。dropmenu_tools ')){...} "しかし、私はこれと同じ結果を得ました。 – Phoenixy
jQueryのアプローチを試しましたか?そうでなければ、 '' '' ''アクティブな ''アイテムしかありません。条件を '' 'if(!event.target.matches( '。active')){...}' ' ' – Dario
それも試してみました。どちらもうまくいきませんでしたし、外をクリックしてもドロップダウンが隠されていなかったので、さらに悪化しました。 – Phoenixy